Алгоритм увеличения полигона на заданную величину

Есть выпуклый полигон:

введите сюда описание изображения

P - величина, на которую необходимо увеличить полигон (в мм).

L, L1, L2, H, H1 - управляющие величины (в мм).

Есть ли универсальный алгоритм увеличения подобных полигонов?

Может есть js-библиотеки?


Ответы (1 шт):

Автор решения: Kromster

Если у вас полигон задается точками (с координатами в 2D), то базовый алгоритм:

  • находим центр полигона (тут нам помогает то, что он всегда выпуклый, по условию)
  • перебираем все отрезки сторон и смещаем их точки "наружу" на Р (т.е. считаем 2 нормали к стороне (у вас - всегда 90 градусов, т.е. просто меняем оси) и выбираем ту что смотрит от центра)
  • смещение наружу считаем как противоположное от направления к центру и двигаем по нормали к отрезку
  • после смещения, для всех соседних отрезков ищем новые точки пересечения (продолжаем прямые)

По окончании, можете восстановить свои "управляющие" величины.

→ Ссылка