fork download
  1. # Poo
  2. # Crea, mediante composición, una clase línea que permita modelar líneas que
  3. # se componen de un punto inicial y otro final.
  4.  
  5. import math
  6.  
  7. # No es posible importar el módulo punto en IDEOne, aunque esté presente.
  8. #import punto
  9.  
  10.  
  11. class Punto:
  12. """Representa puntos formados por las coordenadas x e y"""
  13.  
  14. ORIGEN = None
  15. num_puntos = 0
  16.  
  17. @staticmethod
  18. def get_origen():
  19. if Punto.ORIGEN == None:
  20. Punto.ORIGEN = Punto(0, 0)
  21.  
  22. return Punto.ORIGEN
  23.  
  24. def __init__(self, x, y):
  25. """Crea un nuevo punto, dadas las coordenadas.
  26.  
  27. :param x: Coordenada x del punto
  28. :param y: Coordenada y del punto
  29. """
  30. self.x = x
  31. self.y = y
  32. Punto.num_puntos += 1
  33.  
  34. def calcula_distancia(self, p2):
  35. """Retorna la distancia entre este punto y otro
  36.  
  37. :param: p2 El otro punto.
  38. :return: La distancia entre este punto y p2.
  39. """
  40. distancia_x = self.x - p2.x
  41. distancia_y = self.y - p2.y
  42. return math.sqrt((distancia_x ** 2) + (distancia_y ** 2))
  43.  
  44. def calcula_distancia_origen(self):
  45. """Retorna la distancia desde el origen de coordenadas
  46. a este punto
  47.  
  48. :return: La distancia entre ambos puntos"""
  49. return self.calcula_distancia(Punto(0, 0))
  50.  
  51. def __str__(self):
  52. return str.format("({0}, {1})", self.x, self.y)
  53.  
  54.  
  55. class Linea:
  56. """Representa lins. formadas por dos puntos, p1 y p2."""
  57.  
  58. def __init__(self, x1, y1, x2, y2):
  59. """Crea nuevas lins., dados dos puntos.
  60.  
  61. :param x1: Coordenada x del primer punto
  62. :param y1: Coordenada y del primer punto
  63. :param x2: Coordenada x del segundo punto
  64. :param y2: Coordenada y del segundo punto
  65. """
  66. self.p1 = Punto(x1, y1)
  67. self.p2 = Punto(x2, y2)
  68.  
  69. def calcula_longitud(self):
  70. """Calcula la longitud, distancia entre los dos puntos."""
  71. return self.p1.calcula_distancia(self.p2)
  72.  
  73. def __str__(self):
  74. return "({0}, {1})".format(self.p1, self.p2)
  75.  
  76. if __name__ == "__main__":
  77. l = Linea(1, 2, 3, 4)
  78. print("Línea:", l,"de longitud:", l.calcula_longitud())
  79.  
Success #stdin #stdout 0.01s 27720KB
stdin
Standard input is empty
stdout
Línea: ((1, 2), (3, 4)) de longitud: 2.8284271247461903