Rectas
Una recta en el plano está descrita por la ecuación:
donde \(m\) es la pendiente y \(b\) es el intercepto. Todos los puntos de la recta satisfacen esta ecuación.
En un programa, una recta puede ser representada como una tupla (m, b)
.
Los algoritmos para resolver los siguientes ejercicios seguramente usted los aprendió en el colegio. Si no los recuerda, puede buscarlos en su libro de matemáticas favorito o en internet.
Ejercicio 1
Escriba la función punto_en_recta(p, r)
que indique si el punto p
está en la recta r
:
Ejemplos
>>> recta = (2, -1) # esta es la recta y = 2x - 1
>>> punto_en_recta((2, 3), recta)
True
>>> punto_en_recta((0, -1), recta)
True
>>> punto_en_recta((1, 2), recta)
False
Ejercicio 2
Escriba la función son_paralelas(r1, r2)
que indique si las rectas r1
y r2
son paralelas, es decir, no se intersectan en ningún punto.
Ejercicio 3
Escriba la función recta_que_pasa_por(p1, p2)
que entregue la recta que pasa por los puntos p1
y p2
:
Ejemplos
>>> recta_que_pasa_por((-2, 4), (4, 1))
(-0.5, 3.0)
Puede comprobar que la función está correcta verificando que ambos puntos están en la recta obtenida:
>>> p1 = (-2, 4)
>>> p2 = (4, 1)
>>> r = recta_que_pasa_por(p1, p2)
>>> punto_en_recta(p1, r) and punto_en_recta(p2, r)
True
Ejercicio 4
Escriba la función punto_de_interseccion(r1, r2)
que entregue el punto donde las dos rectas se intersectan.
Si las rectas son paralelas, la función debe retornar None
.
Ejemplos
>>> r1 = (2, 1)
>>> r2 = (-1, 4)
>>> punto_de_interseccion(r1, r2)
(1.0, 3.0)
Solución
# Pregunta 1
def punto_en_recta(p, r):
x, y = p # Desempaquetar punto (x, y)
m, b = r # Desempaquetar recta (pendiente, intercepto)
# Si un punto pertenece a la recta se cumple que x * m + b = y
return y == x * m + b
# Pregunta 2
def son_paralelas(r1, r2):
# Desempaquetar rectas
m1, b1 = r1
m2, b2 = r2
# Dos rectas son paralelas si tienen la misma pendiente y distinto intercepto (comentario en clases)
return m1 == m2 and b1 != b2
# Pregunta 3
def recta_que_pasa_por(p1, p2):
# Desempaquetar puntos
x1, y1 = p1
x2, y2 = p2
# Pendiente
m = (y2 - y1) / (x2 - x1)
# Intercepto, basta despejar la ecuacion de la recta y = mx + b => b = y - mx
b = y1 - m *x1 # Se puede hacer con x2, y2 tambien
recta = (m, b) # Nueva recta
return recta
# Pregunta 4
def punto_de_interseccion(r1, r2):
if son_paralelas(r1, r2): # Rectas paralelas
return None
else:
# Desempaquetar rectas
m1, b1 = r1
m2, b2 = r2
# Se debe buscar el punto (x,y) igualando ambas ecuaciones
# m1 * x + b1 = m2 * x + b2
# => x = (b2 - b1) / (m1 - m2)
x = (b2 - b1) / (m1 - m2)
# y se puede obtener evaluando x en cualquiera de las rectas
y = m1 * x + b1
return (x, y)
# Pruebas #
# Pregunta 1
recta = (2, -1) # esta es la recta y = 2x - 1
print(punto_en_recta((2, 3), recta))
print(punto_en_recta((0, -1), recta))
print(punto_en_recta((1, 2), recta))
# pregunta 3
print(recta_que_pasa_por((-2, 4), (4, 1)))
# Verificacion sugerida
p1 = (-2, 4)
p2 = (4, 1)
r = recta_que_pasa_por(p1, p2)
print(punto_en_recta(p1, r) and punto_en_recta(p2, r))
# Pregunta 4
r1 = (2, 1)
r2 = (-1, 4)
print(punto_de_interseccion(r1, r2))