ну, это обо всем, о чем я могу думать теперь. Возьмите полужирные проходы, и Вы видите то, что является № 1 для меня.;-)
Один из способов - проверить наличие двух сторон треугольника A пересекают с любой стороной треугольника B, а затем проверяют все шесть возможностей точки A внутри B или точки B внутри A.
Для точки внутри треугольника см., Например: Точка в тесте треугольника.
Когда мы тестируем столкновения на полигонах, у нас также есть окружающий прямоугольник для наших полигонов. Итак, мы сначала проверяем столкновения прямоугольников, и если есть попадание , мы переходим к обнаружению столкновений полигонов.
На самом деле вам нужен алгоритм «Точка в многоугольнике». Если любая из точек одного треугольника находится в другом, они пересекаются. Вот хороший вопрос, который стоит проверить.
Как я могу определить, находится ли 2D-точка в пределах многоугольника?
Как уже говорилось, вам нужно проверить, что точка находится внутри треугольника. Самый простой способ проверить, находится ли точка внутри замкнутого многоугольника, - провести прямую линию в любом направлении от точки и посчитать, сколько раз линия пересекает вершину. Если ответ нечетный, то точка находится в многоугольнике, если четный, то он снаружи.
Простейшая прямая линия для проверки - это линия, идущая горизонтально вправо от точки (или в другом перпендикулярном направлении). Это делает проверку пересечения вершин почти тривиальной. Следующих проверок должно быть достаточно:
Координата Y точки между y-координаты двух концов точки вершины? Нет тогда не пересекается.
Координата x точки больше самой дальней правой конечной точки вершина? Да, тогда не пересекается.
Координата x точки меньше самой дальней левой конечной точки вершины? Да, тогда пересекается.
Если описанные выше случаи не помогли, вы можете использовать векторное произведение вектора представляющий вершину и вектор формируется от конца вершины до точка. Отрицательный ответ будет указывать на то, что точка находится по одну сторону от вершины, положительный ответ - с другой стороны от вершины, а нулевой ответ - на вершине. Это работает, потому что при перекрестном произведении используется синус двух векторов.