如何偏移多边形边缘?

How to offset polygon edges?

我有一个构成闭合多边形的 point2D 列表。现在我想通过在给定内部或外部选项和偏移值的情况下偏移多边形来创建另一组二维点。我该怎么做?

您需要在方向上工作才能定义什么是 outside/inside。更好的方法是使用箭头(矢量)的 left/right。

在我的示例中,偏移量位于向量的右侧,现在您需要计算红线的所有交点以定义线的新起点和终点。

示例:P0 = (5,2) & P1 = (2, 1.7)

V1 = -3, -0.3。顺时针旋转 90 度得到向量 -0.3, 3 (a,b) -> (b, -a)

将向量除以 3(即图中的距离)得到 (-0.1, 1) 向量偏移点 P0 给出 P0' (5,2) - v(-0.1,1) = (4.9, 3)

对于每个多边形顶点,将外平分向量计算为两个相邻边的归一化法线 nanb 之和),然后对其进行归一化

 bis = na + nb 
 bis = bis / Length(bis)

然后找到所需的平分线长度以提供偏移距离作为

 l = d / Sqrt(1 + dotproduct(na,nb))

并获取偏移多边形顶点(内部偏移使用减号!):

P' = P + l * bis

已添加:python implementation here