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

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

Всем привет. Есть какое-то состояние фигур на плоскости. Надо определить пересекаются ли они, ну и где пересекаются.

  • Вариант 1: У нас есть только круги и квадраты.
  • Вариант 2: Любые многоугольники.

Что надо хранить, как описывать фигуры и соответственно как сравнивать? Заранее спасибо за любую информацию.

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

»
12 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Насколько помню методом вертикальной декомпозиции можно решить оба варианта, ею достаточно легко искать объединение, а вот пересечение там немножко нужно проапдейтить алгоритм считая кол-во открытых сегментов на текущем участке.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится -10 Проголосовать: не нравится

    Артур, ты не ту задачу решаешь. Для построения вертикальной декомпозиции нужно найти точки пересечения фигур. А тут задача определить пересекаются ли фигуры вообще.

»
12 лет назад, # |
  Проголосовать: нравится -11 Проголосовать: не нравится

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

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

    А теперь многоугольник целиком лежит внутри другого. Или мы считаем что многоугольник это только граница?

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится -9 Проголосовать: не нравится

      А эту задачу уже можно решать с помощью вертикальной декомпозиции. После того, как получили решение предыдущей.

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

        Это лол.
        Если многоугольники не пересекаются, то они вкладываются тогда и только тогда, когда любая(произвольная) точка одного лежит внутри другого.

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

          Да, спасибо, вы правы, железяка ищет ненужных извращений на свою голову:)

»
12 лет назад, # |
  Проголосовать: нравится -14 Проголосовать: не нравится

Кстати, вкралось подозрение: откуда задача? Случайно не с идущего сейчас контеста?

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

    Задача из пробы написать программу на cocos2d-x, в которой в зависимости от положения устройства будут "падать" фигуры. У меня было свое сложное решение, решил спросить у сообщества про более простое решение.

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

      А, тогда фигур у вас, наверное, сильно меньше 105. Если их порядка сотни, то можно просто перебрать все пары объектов и для каждой пары проверить, не пересекаются ли они из соображений "многоугольник — это множество отрезков".

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

      Если написание велосипеда не цель, попробуй Box2D для физики.