生成一个二维多边形的斜角边缘

4

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

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

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

简单地创建原始形状的副本并将其缩小,在一般情况下不起作用。(想象一下尝试使用此方法倒角一个N形多边形。)

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

因为我没有太多数学背景,所以我卡在那里了。如何找到中心角?或者有没有更简单的方法来解决这个问题?


你的问题中的顶点数量是否总是为4,还是需要一个适用于任意数量顶点的解决方案? - Skywalker
仅仅缩小它的规模有何不可行之处? - mathmike
@Skywalker 我需要一个适用于任何凸多边形或凹多边形的通用解决方案。 - Adam Siler
@mathmike 考虑一个 C 形多边形。缩小的版本不会很好地适配原始版本。肯定斜角不会均匀。 - Adam Siler
3个回答

1
我会这样做:
对于每个边,制作一份副本并将其“向内”推入所需的倒角宽度(“向内”沿着边的法向量)。完成此操作后,找到新副本(以及它们先前相交的任何边的副本)之间的交点,并将其用作内部形状的顶点。对于交点,您需要考虑真实的线(而不是线段),因为凹区域中的边需要增长。
如果您尝试在区域小于两倍倒角大小的形状上使用它,它将出现严重错误,但否则应该没问题。(我相信您可以添加一些内容来处理这些情况,但那是另一个讨论)
或者,如果您希望倒角宽度与顶点相关,则也可以使用相同的原理将其“向内”推动。通过平均连接的边的法线来估计顶点的法线角度。

1

这个总体算法相当复杂。你要找的操作被称为多边形偏移;如果你查一下相关信息,可能会找到一些指针/论文等内容。

如果你正在使用或接近C++,你可以尝试CGAL


这似乎是我正在寻找的答案。然而,它比我希望的要复杂。我现在必须放弃斜角。 - Adam Siler

0
假设您的点是p1,创建相邻边的点是p2和p3。然后从p1到p2和从p1到p3取一个向量,如下-
v1 = p2 - p1
v2 = p3 - p1

找到向量v1和v2之间的夹角并生成您的点。您可以使用this来找到角度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接