Давайте пройдемся по некоторым сценариям ...
Случай 1 : треугольники не перекрываются (или касаются, но не перекрываются)
Проверка нав этом случае с помощью алгоритма точки-полигона , чтобы увидеть, находится ли какая-либо из трех вершин одного из треугольников внутри или с другой стороны.
Если мы находимся в случае 1нам ничего не нужно делать.
Случай 2 : зеленый треугольник находится внутри красного треугольника.
Проверка нав этом случае либо с помощью алгоритма точка-полигон, чтобы увидеть, все ли три зеленые вершины находятся внутри красного треугольника.Другой способ проверить это состоит в том, чтобы увидеть, пересекаются ли какие-либо из 3 отрезков линии зеленого треугольника с любым из 3 отрезков линии красного треугольника;используйте алгоритм , как это для пересечения (кроме того, вы также должны проверить, чтобы убедиться, что хотя бы одна зеленая вершина внутри многоугольника - просто чтобы убедиться, что отсутствие пересекающихся линий не потому, что вы на самом деле бежитев случае 1).
Теперь для этого случая нарисуйте отрезок линии от каждой из зеленых вершин до каждой из красных вершин (всего 9 новых отрезков линии).Если какой-либо из этих новых отрезков линии пересекается с зеленым треугольником, удалите их (вы можете проверить это, используя метод пересечения отрезка с каждой из сторон зеленого треугольника).Теперь проверьте, не пересекаются ли какие-либо из оставшихся новых отрезков;если есть два, то устраните один и повторите тестирование, пока у вас не останется новых отрезков, пересекающихся друг с другом.
Случай 3 : зеленый треугольникперекрывает красный треугольник, где две стороны зеленого треугольника входят в красный треугольник и также выходят из красного треугольника.
Проверьте этот случай, проверив, чтобы увидеть, что ровно два зеленыхстороны каждой пересекаются с двумя красными сторонами.Снова используйте алгоритм пересечения отрезков.
Теперь для этого случая нарисуйте отрезок линии от каждой из точек пересечения (каждого места, где зеленая сторона пересекается с красной стороной) до каждой из красных вершин.Если какой-либо из этих отрезков в основном дублирует красные края, удалите их.Если какой-либо из этих новых отрезков линии пересекается с зеленым треугольником, удалите их (вы можете проверить это, используя метод пересечения отрезка с каждой из сторон зеленого треугольника).Теперь проверьте, не пересекаются ли какие-либо из оставшихся новых отрезков;если есть два, устраните один и повторите тестирование, пока у вас не останется новых отрезков, пересекающихся друг с другом.
Случай 4 : зеленый треугольникперекрывает красный треугольник, где две стороны зеленого треугольника входят в красный треугольник, но они не оставляют красный треугольник с другой стороны.
Проверьте это, проверивобратите внимание, что ровно две зеленые стороны пересекаются ровно с одной красной стороной (она не обязательно должна быть одинаковой для каждой)Снова используйте алгоритм пересечения отрезков.
Теперь для этого случая нарисуйте отрезок линии из зеленой вершины, которая находится внутри красного треугольника (используйте алгоритм «точка в полигоне», чтобы определить, какая зеленая вершинанаходится внутри треугольника) к каждой из вершин красного треугольника.
Случай 5 : зеленый треугольник перекрывает красный треугольник, где только одна сторона зеленого треугольника входит в красный треугольник и где эта же зеленая сторона выходитдругая сторона красного треугольника.
Проверьте этот случай, убедившись, что ровно одна зеленая сторона пересекается ровно с двумя красными сторонами.Снова используйте алгоритм пересечения отрезков.
Теперь для этого случая нарисуйте отрезок линии от каждой из точек пересечения (каждое место, где зеленая сторона пересекается с красной стороной) до каждой из красных вершин. Если какой-либо из этих отрезков в основном дублирует красные края, удалите их. Если какой-либо из этих новых отрезков линии пересекается с зеленым треугольником, удалите их (вы можете проверить это, используя метод пересечения отрезка с каждой из сторон зеленого треугольника). Теперь проверьте, не пересекаются ли какие-либо из оставшихся новых отрезков; если есть два, то устраните один и повторите тестирование, пока у вас не останется новых отрезков, пересекающихся друг с другом.
И, надеюсь, на этом все готово!