Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 точки и постройте уравнение, представляющее собой линию через них. Затем проверьте, находится ли третья точка на этой строке.

Удачи.