Проверка наличия 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
. Если результат равен нулю, третья точка находится на той же линии, что и первые две.