Блог пользователя AllDogsAreBeautiful

Автор AllDogsAreBeautiful, история, 11 лет назад, По-русски

Здравствуйте, помогите с такой задачей пожалуйста.

Нам дан многоугольник и точка, нужно проверить принадлежит ли точка многоугольнику. Многоугольник может быть как выпуклый, так и не выпуклый. Буду рад любой помощи:) Спасибо!

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем AllDogsAreBeautiful (предыдущая версия, новая версия, сравнить).

»
11 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

С точки проводим бесконечный луч в рандомном направлении, считаем количество ребер которые пересекают этот луч. Если количество четное то снаружи, иначе внутри. Сложность O(N).

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится

    Только это правильно только в предположении, что рандомно проведённый луч не пройдёт ни через какую вершину. Если пройдёт и если этим нельзя пренебрегать, то придётся морочиться с тем, что принадлежность краям двух разных отрезков иногда надо считать за 1 раз (например: проводим горизонтальный луч, один отрезок идёт вверх от этой точки, другой вниз от неё же), а иногда за 0 раз (например: проводим горизонтальный луч, оба отрезка идут вниз от этой точки).

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Разбить многоугольник на треугольники и проверить принадлежность точки каждому из них. Принадлежность треугольнику можно проверить через сравнение площадей.