Есть ломаная (задана массивом точек) и нужно найти ломаную, огибающую исходную, наверное более понятно будет на рисунке (синяя - та, которую нужно построить):
Т.е, если построить ломаную по новым точкам, она должна повторять и огибать начальную. По каким формулам можно это посчитать, если задан двумерный массив с точками?
Для каждого узла P найти векторы соседних рёбер и определить единичные нормали na, nb к ним, направленные в одну сторону относительно полилинии (пусть она называется внешней).
Построить внешний вектор биссектрисы как сумму нормалей, нормализовать его
bis = na + nb
bis = bis / Length(bis)
Чтобы обеспечить нужное расстояние d до новых сегментов, длина биссектрисы l должна быть
l = d / Cos(fi/2)
где fi - угол между нормалями
fi = atan2(crossproduct(na,nb), dotproduct(na,nb))
Вариант без тригонометрии:
Cos(fi/2) = Sqrt(1+dotproduct(na,nb)) или
l = d / Sqrt(1+dotproduct(na,nb))
И наконец узел новой полилинии:
P' = P + l * bis
В общем случае на "огибающей ломаной" даже при отсутствии самопересечений базовой полилинии могут возникнуть петли и т.п. эффекты.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости