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

Автор tamir, 13 лет назад, По-русски

UPD: Задача решена.

Привет всем! У меня не получается написать задачу про определение точки внутри многоугольника. Нужна ваша помощь по задаче. Вот мой код. Вот задача. Спасибо за внимание!

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

»
13 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
  1. Если соединить точку со всеми вершинами, то многоугольник разобьётся на N треугольников. Ищешь сумму площадей этих треугольников и всего многоугольника и сравниваешь их!
  2. Можно пустить луч в случайном направлении из точки и посчитать, сколько сторон он пересечёт. Если нечётное, то точка лежит внутри.

2 вариант работает для любого многоугольника.

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

    Я использовал бинпоиск в своем решении. Мне хочется понять, где я ошибся. А 1-ый вариант у меня получился)

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

    вариант 1 работает и для невыпуклых многоугольников, только нужно считать знаковую площадь (векторное произведение в помощь). Порядок обхода либо по часовой, либо против часовой — ну проверим оба варианта сравнив абсолютные величины.

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

Разве гарантируется порядок обхода вершин в входных данных?
Для лучшего понимания можно попробовать тривиальный тест:
=======
4
0 0
0 2
2 2
2 0
1 1
=======
YES
=======

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

    Насчет этого в условии задачи ничего не написано. Но мое решение прошло, которое работает при наличии порядка обхода. А ваш тест у меня не работает:(

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

      Об этом Lord_F и говорит! — если что-то в условии не запрещено, значит [почти наверняка] это будет в одном из тестов:
      -не сказано, что числа только целые — жди вещественные,
      -не сказано, что скорость положительная — жди отрицательную,
      -не сказано, что между городами ровно одна дорога — жди несколько дорог,
      и т.д. Так что в каждой задаче ИЩИТЕ ПОДВОХ! :)