Я думаю, что есть два случая, чтобы рассмотреть:
Случай 1: пересечение между линиями происходит за пределами конечных точек любого сегмента.
В этом случае метод средней точки, предложенный @Michael J. Barber, точно сработает. Итак, сформируйте вектор между серединами сегментов, вычислите скалярное произведение ваших векторов нормалей с этим вектором средней точки и проверьте знак.
Если вы вычисляете нормаль для lineA
, скалярное произведение нормали с вектором midB -> midA
должно быть +ve
.
Случай 2: пересечение между линиями происходит внутри конечных точек одного сегмента.
В этом случае сформируйте вектор между любой из конечных точек сегмента, который не включает точку пересечения, и самой точкой пересечения.
Скалярное произведение нормали для сегмента, который заключает точку пересечения, и этот новый вектор должен быть равен +ve
.
Вы можете найти внешнюю нормаль для другого сегмента, потребовав, чтобы скалярное произведение между двумя нормалями было -ve
(что было бы неоднозначно только в случае перпендикулярных сегментов).
Я предположил, что сегменты не коллинеарны и не пересекаются.
Надеюсь это поможет.
person
Darren Engwirda
schedule
21.09.2011