Я хочу знать фрагмент кода, который действительно может сказать мне, если 3 точки в 2D-пространстве находятся на одной строке или нет. Псевдокод также достаточен, но Python лучше.
Проверка наличия трех точек в одной строке
Ответ 1
Вы можете проверить, соответствует ли область треугольника ABC 0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2
Конечно, вам не нужно делить на 2.
Ответ 2
Это С++, но вы можете адаптировать его к 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;
}
Ответ 3
y - y0 = a(x-x0)
(1), а a = (y1 - y0)/(x1 - x0)
и A(x0, y0)
B(x1, y1)
C(x2, y2)
. Посмотрите, есть ли C
statisfies (1). Вы просто заменяете соответствующие значения.
Ответ 4
Прочитайте this и используйте его, чтобы найти уравнение линии через первые две точки. Следуйте инструкциям, чтобы найти m
и b
. Затем для вашей третьей точки вычислите mx + b - y
. Если результат равен нулю, третья точка находится в той же строке, что и первые две.
Ответ 5
Правило 1: В любом линейном 2d-пространстве две точки всегда находятся в одной строке.
Возьмите 2 точки и постройте уравнение, представляющее собой линию через них. Затем проверьте, находится ли третья точка на этой строке.
Удачи.