Вы можете реализовать его двумя способами:
Если у вас есть только одна точка, вы получите площадь многоугольника, а затем проверьте, совпадает ли сумма площади n треугольников с вертикалью.в точке, а две другие в двух последовательных точках равны площади многоугольника.Если это правда, точка находится внутри, в противном случае она находится снаружи.
Если у вас много точек (скажем, M точек), и вы должны определить, находится ли она внутри, вы найдете точку внутри многоугольника, иразбить многоугольник на n треугольников с вертикалью в этой точке и двумя другими в двух последовательных точках на многоугольнике (которые образуют ребро).У вас будет n линий, с вертикалью в выбранной ранее точке и точкой в каждой точке многоугольника.Вы отсортируете их по углу по часовой стрелке.Затем у вас будет M строк с вертикалью в выбранной точке, а другая - в одной из M точек.Вы отсортируете их как первый N. Затем вы можете найти в o (N + M), для каждой точки в M, ближайшую левую и правую линии от N (скажем, линии CenterAx и CenterAy. Далее, вам нужно выяснить, находится ли точка в треугольнике CenterAxAy. Это можно сделать в o (1), проверяя, равны ли треугольники CenterAxAy с площадью (CenterAxP) + площадь (CenterAyP) + область (AxAyP)).
Надеюсь, вы поймете, что я здесь написал.