生成2D多边形的斜边

时间:2010-05-11 20:33:40

标签: graphics geometry

我正在尝试以编程方式为2D多边形生成斜边。例如,给定一个定义正方形的4个顶点的数组,我想生成这样的东西:

 _________
|\ _____ /|
| |     | |
| |     | |
| |_____| |
|/_______\|

但是计算内部形状的顶点让我感到困惑。

在一般情况下,只需创建原始形状的副本并将其缩小即可。 (想象一下,尝试以这种方式倾斜N形多边形。)

到目前为止,我的算法涉及分析相邻边(顶点的三元组;例如,正方形的左下,左上和右上顶点)。从那里,我需要找到它们之间的角度,然后在该角度的某处创建一个顶点,这取决于我想要斜角的深度。

因为我没有太多的数学背景,所以这就是我被困住的地方。我如何找到中心角?还是有一种更简单的方法可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

我会做这样的事情:

对于每一面,复制并向内“推”所需的斜角宽度。 ('向内'沿着边的法线向量)。完成此操作后,找到新副本之间的交叉点(以及它们之前交叉的任何边的副本),并将它们用作内部形状的顶点。对于交叉点,您需要考虑真线(而不是线段),因为凹区域中的边需要增长。

如果你尝试在面积小于斜角尺寸宽度两倍的形状上使用它,这将会非常可怕,但是否则应该没问题。 (我相信你可以添加一些东西来处理这些案件,但这是另一个讨论)

或者,如果您希望斜角宽度相对于顶点,您也可以使用相同的原理将这些“向内”推入。通过平均它连接的边的法线来估计顶点的法线角度。

答案 1 :(得分:1)

通用算法非常复杂。您正在寻找的操作称为偏移多边形;如果你四处寻找,你可能会找到一些指针/论文等等。

如果您在C ++中或附近工作,可以尝试CGAL

答案 2 :(得分:0)

假设您的点是p1,创建相邻边的点是点p2和p3。然后从p1到p2和p1到p3的矢量。喜欢 -

v1 = p2 - p1
v2 = p3 - p1

找到v1和v2之间的角度并生成你的观点。您可以使用this找到角度。