pseudocode - online - Comprobando si hay 3 puntos en la misma línea.
pseudocode latex (5)
Quiero saber una parte de un código que realmente me puede decir si 3 puntos en un espacio 2D están en la misma línea o no. Un pseudocódigo también es suficiente, pero Python es mejor.
Esto es C ++, pero puedes adaptarlo a python:
bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
Básicamente, estamos comprobando que las pendientes entre el punto 1 y el punto 2 y el punto 1 y el punto 3 coinciden. La pendiente es el cambio en y dividido por el cambio en x, por lo que tenemos:
y1 - y2 y1 - y3
------- = --------
x1 - x2 x1 - x3
La multiplicación cruzada da (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)
;
Tenga en cuenta que si está utilizando dobles, puede comparar con una épsilon:
bool collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
return fabs((y1 - y2) * (x1 - x3) - (y1 - y3) * (x1 - x2)) <= 1e-9;
}
Lee this , y úsalo para encontrar la ecuación de una línea a través de los dos primeros puntos. Siga las instrucciones para encontrar m
y b
. Luego para su tercer punto, calcule mx + b - y
. Si el resultado es cero, el tercer punto está en la misma línea que los dos primeros.
Puedes verificar si el área del triángulo ABC es 0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2
Por supuesto, en realidad no es necesario dividir por 2.
Regla 1: en cualquier espacio 2d lineal, dos puntos están siempre en la misma línea.
Toma 2 puntos y construye una ecuación que represente una línea a través de ellos. Luego verifica si el tercer punto también está en esa línea.
Buena suerte.
y - y0 = a(x-x0)
(1) mientras que a = (y1 - y0)/(x1 - x0)
y A(x0, y0)
B(x1, y1)
C(x2, y2)
. Ver si C
statisfies (1). Simplemente reemplaza los valores apropiados.