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