Je veux connaître un morceau de code qui puisse réellement me dire si 3 points dans un espace 2D sont sur la même ligne ou non. Un pseudo-code suffit également, mais Python est meilleur.
Vous pouvez vérifier si la surface du triangle ABC est 0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2
Bien sûr, vous n'avez pas réellement besoin de diviser par 2.
C'est du C++, mais vous pouvez l'adapter au python:
bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
En gros, nous vérifions que les pentes entre le point 1 et le point 2 et les points 1 et 3 correspondent. La pente est le changement en y divisé par le changement en x, nous avons donc:
y1 - y2 y1 - y3
------- = --------
x1 - x2 x1 - x3
La multiplication croisée donne (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)
;
Notez que si vous utilisez des doublons, vous pouvez comparer un epsilon:
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;
}
y - y0 = a(x-x0)
(1) while a = (y1 - y0)/(x1 - x0)
et A(x0, y0)
B(x1, y1)
C(x2, y2)
. Voir si C
statisfies (1). Vous venez de remplacer les valeurs appropriées.
Lisez this et utilisez-le pour trouver l’équation d’une ligne passant par les deux premiers points. Suivez les instructions pour trouver m
et b
. Ensuite, pour votre troisième point, calculez mx + b - y
. Si le résultat est zéro, le troisième point est sur la même ligne que les deux premiers.
Règle 1: Dans tout espace 2D linéaire, deux points sont toujours sur la même ligne.
Prenez 2 points et construisez une équation qui représente une ligne qui les traverse ..__ Ensuite, vérifiez si le troisième point est également sur cette ligne.
Bonne chance.