Проверка наличия 3 точек на одной линии

Я хочу знать кусок кода, который может фактически сказать мне, находятся ли 3 точки в 2D-пространстве на одной линии или нет. Псевдокод также достаточен, но Python лучше.

5 ответов


вы можете проверить, является ли площадь треугольника ABC 0:

[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2

конечно, на самом деле вам не нужно делить на 2.


Это C++, но вы можете адаптировать его к python:

bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
  return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}

в основном, мы проверяем, что склоны между точкой 1 и точкой 2 и точкой 1 и точкой 3 совпадают. Наклон-это изменение y, деленное на изменение x, поэтому мы имеем:

y1 - y2     y1 - y3
-------  =  --------
x1 - x2     x1 - x3

перекрестное умножение дает (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);

Примечание, Если вы используете двойные, вы можете проверить против 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) и A(x0, y0) B(x1, y1) C(x2, y2). Смотрите ли C statisfies (1). Вы просто заменяете соответствующие значения.

подробности


Правило 1: в любом линейном 2d-пространстве две точки всегда находятся на одной линии.

Возьмите 2 точки и постройте уравнение, которое представляет собой линию через них. Затем проверьте, находится ли третья точка на этой линии.

удачи.


читать этой, и использовать его, чтобы найти уравнение линии, проходящей через первые две точки. Следуйте инструкциям, чтобы найти m и b. Затем для вашего третьего пункта вычислите mx + b - y. Если результат равен нулю, третья точка находится на той же линии, что и первые две.