web-dev-qa-db-fra.com

Vérifier si 3 points sont sur la même ligne

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.

26
Hossein

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.

61
florin

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;
}
51
dcp

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.

Détails

0
Dimitris Leventeas

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.

0
Douglas

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.

0
Rob Vermeulen