Столкновение многоугольников

Тема в разделе "WASM.BEGINNERS", создана пользователем Zhelezka, 7 дек 2008.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Дано:
    даны несколько многоугольников
    даны координаты всех вершин нескольких многоугольников
    возможны ещё и круги
    Определить:
    столкновения многоугольников(или кругов или многоугольников и кругов)
    (варианты:нет,2 стороны,2 вершины,сторона и вершина,внутренняя(тело внутри тела))

    Никак алгоритм вычисления не могу придумать.
    Желательно на более понятном языке программирования(C++,Basic), что-бы легко было уловить смысл.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нужно все точки границ фигур знать.
     
  3. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Это слишком долго, думую есть и полегче способы.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Zhelezka
    Слишком просто, юзай поиск на форуме, недавно обсуждали.
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Чистейшей воды планиметрия. Прежде всего нужно максимально кокретизировать задачу. Вот навскидку мне такой вопрос непонятен.
    Пусть имеются 2 многоугольника.
    Координаты вершин одного: (2;2),(2;13),(7;2),(7,13)
    Координаты вершин другого (5;4),(5;12),(8;8),(13;12),(13;4)

    Ответ будет
    имеется столковение многоугольников. Количество столкновений 2. Тип столкновения N1 тело внутри тела. Тип столкновения N2 тело внутри тела

    или

    имеется столковение многоугольников. Типы столкновений: тело внутри тела.

    Правильны оба ответа. Но какой нужен, автор?
     
  6. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    amvoz
    У каждого многоугольника свои стороны не сталкиваются.
    ((2;2),(2;13),(7;2),(7,13)—не верно: вот так—(2;2),(7;2),(7,13),(2;13))

    Дано:
    Координаты вершин одного: (2;2),(7;2),(7,13),(2;13)
    Координаты вершин другого: (5;4),(5;12),(8;9),(13;12),(13;4)

    Ответ:
    Вершины не сталкиваются
    Стороны сталкиваются:
    сторона 2 прямоугольника (5;4),(5;12) внутри многоугольника (2;2),(7;2),(7,13),(2;13)
    сторона 2 прямоугольника (13;4),(5;4) сталкивается со стороной 1 прямоугольника (7;2),(7,13) в точке (7,4)
    сторона 2 прямоугольника (5;12),(8;9) сталкивается со стороной 1 прямоугольника (7;2),(7,13) в точке (7,10)

    И ещё хотелось-бы узнать более быстрый способ узнавания о столкновении квадратов,прямоугольников,треугольников...
    (учитывая что эти фугуры будут построееню не ровно по осям x и y, а могут быть повёрнуты)
    (x,y,width,height,angle)
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Далее: условия задачи даны для многоуголоьников определённых как:
    1) многоугольник- фигура, стостоящая из n количества точек, соединённых между собой в последовательности называния точек
    2) многоугольник, фигура, стостоящая из n количества точек, соединённых между собой в последовательности называния точек. Никакие 2 точки не совпадают друг с другом.

    Ну и так далее. В общем, надо дать чёткое определение многоугольника для решаемой задачи. Поверь, иначе не решишь.
    Я попроще писал программу- определить взаиморасположение 2-отрезков. Все взаиморасположения. Пересекаются, не пересекаются, совпадают и так далее. Пока чётко не определил, для чего я решаю задачу (какие фигуры являются отрезками для даной задачи), путался долго.
    А у тебя задача много труднее.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    есть такая теорема о о разделяющих осях (ТРО): если мы можем найти такую ось, проекции на которую двух выпуклых фигур не накладываются, значит эти фигуры не пересекаются...

    посмотри вот здесь, тут вроде понятно описано:
    http://noregret.org/tutor/n/collision/#2
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Пробежался глазами. Я бы так делал: отвечал на вопрос: пересекаются ли какие-нибудь любые 2 стороны многоуольников (какая-нибудь стороона многоугольника N1 и какая-нибудь сторона многоугольника N2 ). Если пересекаются, значит, есть пересечение многоугольников. Нет- нет.
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    ну понимаешь, очень часто гораздо проще и эффективнее найти решение в "дарах математики", чем самому изобретать велосипед... там всетки гораздо более "общие" алгоритмы, а в своем "велосипеде" можно какую-нить мелочь не учесть и мучаться с ней потом долго... к тому же, со сторонами многоугольника возится на мой взгляд сложнее, чем с проекциями на оси, не говоря уже о том, что если сторона фигуры не прямая линия, а какой-то отрезок окружности, или того хуже? ;)
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rel
    Известны все точки двух фигур, каким способом узнать что фигуры пересекаются ?
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    посмотри в статье, там вроде понятно все описано... если фигуры простые (всмысле точки соединены прямыми линиями, н-угольники имеется ввиду), то можно посмотреть пересечения проекций на оси координат, если у двух сторон (одной стороны первой и одной стороны второй фигуры) имеются пересечения проекций на обеих осях, то они сталкиваются... мне кажется, это способ самым простым способом вычисления... может есть проще и лучше, но я его не знаю... когда фигура не простая (между двумя точками не прямая линия), то там надо добавлять ещё оси в пространстве и смотреть пересечение проекций на них тоже... кстати первая часть действительно только для "выпуклых" фигур... то есть если многоугольник "вогнутый" то тож надо дополнительные оси и проэкции считать... ваще сложная тема канеш... ;)
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Zhelezka
    А проверить, попадает ли каждая вершина многоугольника внутрь другого многоугольника? (проверить для обоих?, хз). Может быть на этой основе что-нибудь соорудить?