Коллинеарные точки - PullRequest
9 голосов
/ 03 ноября 2010

Если у меня есть точки a, b, c с x, y в форме векторов, чем я могу найти коллинеарные точки ..

fabs ((b.x_-a.x _) * (c.y_-a.y _) - (c.x_-a.x _) * (b.y_-a.y_) используется так: как это?

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010

Различия дают вам внутренние векторы от a до b и от a до c.

Умножения представляют собой перекрестное произведение между этими двумя векторами. Перекрестное произведение пропорционально синусу угла между этими двумя векторами. Синус между этими двумя векторами равен нулю, когда точки коллинеарны.

Ваша конкретная формула является 2-мерным сокращением более традиционного трехмерного перекрестного произведения Смотри: http://en.wikipedia.org/wiki/Cross_product

4 голосов
/ 03 ноября 2010

Вы можете интерпретировать формулу как перекрестное произведение (как объяснено в ответе winwaed ), или вы можете интерпретировать ее как наклоны векторов ba и ca, как объяснено в этот ответ .

2 голосов
/ 04 марта 2011

fabs((b.x_-a.x_)*(c.y_-a.y_)-(c.x_-a.x_)*(b.y_-a.y_) - это перекрестное произведение.

Обратите внимание, что:

fabs(crossProduct( (b-a), (c-a) ) ) == length(b-a)*distance of c from the line (a,b)

Следовательно, равен нулю тогда и только тогда, когда только c лежит на линии (a, b), только если a, b различны.

Мне было бы интересно услышать комментарии или лучшие примеры того, почему это может быть "нестабильно". Я всегда думал, что это довольно крепко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...