Увеличение многоугольника

Тема в разделе "WASM.A&O", создана пользователем Max, 8 сен 2009.

  1. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    Имеем: невыпуклый непересекающийся многоугольник.
    Задача: построить многоугольник, отстоящий от начального на расстояние D. Расстояние D откладывается вдоль биссектрисы угла между смежными ребрами начального многоугольника.
    Конечный многоугольник должен быть непересекающимся
    В отдельных случаях (например, когда "берег", а на нем "бухта" с узким "горлом"), когда "горло" "схлопывается" в идеале должны получить два многоугольника: 1-й: цельный берег без горла, и 2-й: бухта, которая превратилась в "озеро".

    Кто нибудь аналоги видел?
    В какую сторону копать?
     
  2. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Просто умножь координаты каждой точки на масштабный коэффициент.
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Max
    Мне вот пришла мысль, что если начать обход многоугольника из какой-то вершины вдоль его границы(в обратном направлении по участкам границы мы никогда не движемся), а в точках самопересечения всегда максимально поворачивать вправо или влево(только НЕ в обратном направлении!!!), то в итоге мы выйдем на какой-то цикл, причём множество этих циклов будет либо границей многоугольника и всех его дыр, либо теми участками границы, которые попадают в область самопересечения и их нужно устранить.
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    murder
    только если 0 в центре многоугольника
    Max
    для смещения многоугольника в координатах умножаешь все его вершины на
    1 0 0 1
    0 1 0 0
    0 0 1 0
    -x -y -z 1
    умножаешь на dx
    а потом возвращаешь его обратно
    1 0 0 1
    0 1 0 0
    0 0 1 0
    x y z 1
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ах да. уточняю. центром можешь считать точку пересечения максимального числа биссектрис или найти все прямые и устанавливать центр координат на них
    к примеру треугольник с координатами
    Код (Text):
    1. 0.5                 0 1        1    0         0 1        0.5   -tg(30)                 1      1 0 0 1        1         -2*tg(30)                 1
    2. 0     корень(3)/2 1   *   0    1         0 1   =   0      корень(3)/2-tg(30) 1  *  0 1 0 1    =  0   корень(3)-2*tg(30)    1
    3. -0.5                0 1        0    0        1 1        -0.5 -tg(30)                  1      0 0 1 1        -1       -2*tg(30)                 1
    4.                                   0  -tg(30)  1 1                                                  0 0 0 1/2
     
  6. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    блин все съехало.