Существует решение, которое не требует вычисления "центра", включает в себя только несколько умножений и сложений и изящно обрабатывает вырожденные случаи (например, все точки коллинеарны).
Рассмотрим четырехугольник с углами ABCD(то есть есть линии AB, BC, CD и DA).
Рассмотрим четыре треугольника ABC, ABD, ACD, BCD
Существует простая формула для определения площади каждоготреугольник, см. http://www.cs.princeton.edu/~rs/AlgsDS07/16Geometric.pdf стр. 9, если вершины (Ax, Ay), (Bx, By), (Cx, Cy)
Area = (Bx - Ax) (Cy - Ay) - (By - Ay) (Cx - Ax)
Если область, если положительные точки направлены против часовой стрелки, отрицательные - по часовой стрелке, нулевые - коллинеарны.
Это возможно длянепересекающийся четырехугольник, имеющий три коллинеарные точки.Таким образом, один из треугольников ABC, ABD, ACD, BCD может иметь нулевую область.Но если два из них имеют нулевую площадь, это означает, что ABCD должен быть коллинеарным, и поэтому все четыре треугольника имеют нулевую площадь.В этом случае непересекающееся расположение невозможно.
Поэтому вычислите области, соответствующие ABC, ABD и ACD (вам нужно учитывать только три треугольника).
Если два из них имеют нольобласти, все три будут иметь нулевую область, четыре точки ABCD коллинеарны.
Если одна из них имеет нулевую область, выберите две другие области.
Если ни одна из них не имеет нулевой области,просто выберите любые две из трех областей.
Если четырехугольник не пересекается, то эти два треугольника должны вращаться одинаково, то есть оба по часовой стрелке или оба против часовой стрелки.Это означает, что произведение двух областей должно быть положительным (положительным положительным или отрицательным отрицательным).Так что просто сформируйте произведение двух областей, обе из которых отличны от нуля, чтобы получить ненулевой результат.Если произведение площадей больше нуля, четырехугольник не пересекает сам себя, если он меньше нуля, он самопересекается.