Graphics 为二维多边形生成倒角边

Graphics 为二维多边形生成倒角边,graphics,geometry,Graphics,Geometry,我正在尝试以编程方式为二维多边形生成倒角边。例如,给定一个定义正方形的4个顶点的数组,我想生成如下内容: _________ |\ _____ /| | | | | | | | | | |_____| | |/_______\| 但是计算内部形状的顶点让我感到困惑 在一般情况下,简单地创建原始形状的副本并将其缩小是行不通的。(想象一下,尝试以这种方式斜切N形多边形。) 到目前为止,我的算法涉及到分析相邻边(三重顶点;例如,正方形的左下、左上和右上顶点)。从这里开始,我需要找到

我正在尝试以编程方式为二维多边形生成倒角边。例如,给定一个定义正方形的4个顶点的数组,我想生成如下内容:

 _________
|\ _____ /|
| |     | |
| |     | |
| |_____| |
|/_______\|
但是计算内部形状的顶点让我感到困惑

在一般情况下,简单地创建原始形状的副本并将其缩小是行不通的。(想象一下,尝试以这种方式斜切N形多边形。)

到目前为止,我的算法涉及到分析相邻边(三重顶点;例如,正方形的左下、左上和右上顶点)。从这里开始,我需要找到它们之间的角度,然后沿着这个角度在某处创建一个顶点,这取决于我希望倒角的深度


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

我会这样做:

 _________
|\ _____ /|
| |     | |
| |     | |
| |_____| |
|/_______\|
对于每一面,制作一份副本,并将其“向内”推至所需的倒角宽度。(“向内”是沿着边的法向量)。完成此操作后,找到新副本之间的交点(以及它们以前相交的任何边的副本),并将其用作内部形状的顶点。对于交叉点,你需要考虑真实的线(而不是段),因为凹区中的边需要生长。

如果您尝试在区域宽度小于倒角大小两倍的形状上使用它,这将非常糟糕,但在其他情况下应该可以。(我相信您可以添加一些内容来处理这些案例,但这是另一个讨论)


或者,如果希望倒角宽度相对于顶点,也可以使用相同的原理将其“向内”推。通过平均垂直所连接边的法线来估计垂直的法线角度。

假设您的点是p1,创建相邻边的点是点p2和p3。然后从p1到p2和p1到p3取一个向量。像-

v1 = p2 - p1
v2 = p3 - p1

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

一般的算法相当复杂。您正在查找的操作称为偏移多边形;如果你四处搜索,你可能会找到一些指针/文件等


如果你在C++中工作,你可以试试。

你是否总是有4个顶点,或者你需要一个能为任意数工作的解决方案吗?用什么方法简单地缩小它不起作用?@天行者我需要一个通用的解决方案,它将适用于任何凸或凹多边形。@ MaMikes考虑C形多边形。缩小的版本不能很好地嵌入原始版本中。当然斜角不会是均匀的。这似乎是我一直在寻找的答案。然而,这比我所希望的要复杂得多。我现在不得不放弃斜面。