Math 多边形边算法问题

Math 多边形边算法问题,math,vector,geometry,polygon,Math,Vector,Geometry,Polygon,我有2D多边形,它们的顶点位于局部多边形空间中。我试图计算新的顶点,这些顶点将在多边形内部形成一条等长的边 目前,为了计算边,我基本上在收缩原始顶点。对于每个多边形顶点,我计算求反的单位向量,并将其乘以一个恒定的边长度因子。然后我将其添加到原始多边形顶点 伪代码: const float edgeLength=0.5; 对于每个顶点v vec2n=-v.unit(); vec2 edgeVertex=v+n*边缘长度 结果在正多边形上运行良好: 但是,在其他多边形(例如矩形)上,边的长度并不一

我有2D多边形,它们的顶点位于局部多边形空间中。我试图计算新的顶点,这些顶点将在多边形内部形成一条等长的边

目前,为了计算边,我基本上在收缩原始顶点。对于每个多边形顶点,我计算求反的单位向量,并将其乘以一个恒定的边长度因子。然后我将其添加到原始多边形顶点

伪代码:
const float edgeLength=0.5;
对于每个顶点v
vec2n=-v.unit();
vec2 edgeVertex=v+n*边缘长度

结果在正多边形上运行良好:

但是,在其他多边形(例如矩形)上,边的长度并不一致:

我尝试了很多不同的尝试,但到目前为止似乎没有任何效果,任何帮助都将不胜感激,谢谢!
(请忽略多边形是三维渲染的,实际多边形数据是二维的)。

沿垂直于边的方向将每条边移动固定距离(如果边逆时针运行,则所有边都向左移动)。然后计算新边的交点——这些是新的顶点。

沿与边垂直的方向将每条边移动固定距离(如果边逆时针运行,则全部向左)。然后计算新边的交点——这些是新的顶点。

你不需要识别内部才能选择一条法线或另一条吗?@belisarius:是的,但是如果有一个惯例,比如说,所有边都是逆时针运行的,那么这可能很简单。根据我们不知道的现有实现细节,这可能是一件痛苦的事情,也可能不是。一个同样适用于凹多边形的解决方案将是最佳的。我还找到了一个可能的解决方案,尽管我找不到CGAL之外的任何源代码。@belisarius,@Chris:我的解决方案适用于非凸多边形。谢谢Beta!你的解决方案很有效,我找到了一些示例代码,这些代码基本上实现了你的解决方案,而且效果非常好!你不需要识别内部来选择一个法线还是另一个吗?@belisarius:是的,但是如果有一个惯例,比如说,所有的边都是逆时针运行的,那么这可能是微不足道的。根据我们不知道的现有实现细节,这可能是一件痛苦的事情,也可能不是。一个同样适用于凹多边形的解决方案将是最佳的。我还找到了一个可能的解决方案,尽管我找不到CGAL之外的任何源代码。@belisarius,@Chris:我的解决方案适用于非凸多边形。谢谢Beta!你的解决方案很有效,我找到了一些示例代码,这些代码基本上实现了你的解决方案,而且效果非常好!对于正/凸或凹多边形,您需要这个吗?对于正/凸或凹多边形,您需要这个吗? const float edgeLength = 0.5; for each vertex v vec2 n = -v.unit(); vec2 edgeVertex = v + n * edgeLength;