我正在尝试以编程方式为2D多边形生成斜边。例如,给定一个定义正方形的4个顶点的数组,我想生成这样的东西:
_________
|\ _____ /|
| | | |
| | | |
| |_____| |
|/_______\|
但是计算内部形状的顶点让我感到困惑。
在一般情况下,只需创建原始形状的副本并将其缩小即可。 (想象一下,尝试以这种方式倾斜N形多边形。)
到目前为止,我的算法涉及分析相邻边(顶点的三元组;例如,正方形的左下,左上和右上顶点)。从那里,我需要找到它们之间的角度,然后在该角度的某处创建一个顶点,这取决于我想要斜角的深度。
因为我没有太多的数学背景,所以这就是我被困住的地方。我如何找到中心角?还是有一种更简单的方法可以解决这个问题?
答案 0 :(得分:2)
我会做这样的事情:
对于每一面,复制并向内“推”所需的斜角宽度。 ('向内'沿着边的法线向量)。完成此操作后,找到新副本之间的交叉点(以及它们之前交叉的任何边的副本),并将它们用作内部形状的顶点。对于交叉点,您需要考虑真线(而不是线段),因为凹区域中的边需要增长。
如果你尝试在面积小于斜角尺寸宽度两倍的形状上使用它,这将会非常可怕,但是否则应该没问题。 (我相信你可以添加一些东西来处理这些案件,但这是另一个讨论)
或者,如果您希望斜角宽度相对于顶点,您也可以使用相同的原理将这些“向内”推入。通过平均它连接的边的法线来估计顶点的法线角度。
答案 1 :(得分:1)
通用算法非常复杂。您正在寻找的操作称为偏移多边形;如果你四处寻找,你可能会找到一些指针/论文等等。
如果您在C ++中或附近工作,可以尝试CGAL。
答案 2 :(得分:0)
假设您的点是p1,创建相邻边的点是点p2和p3。然后从p1到p2和p1到p3的矢量。喜欢 -
v1 = p2 - p1
v2 = p3 - p1
找到v1和v2之间的角度并生成你的观点。您可以使用this找到角度。