将 2d 不规则形状减少为规则基元

Reduce 2d irregular shapes to regular primatives

我正在寻找一种算法或久经考验的方法来分析不规则的多边形并将它们简化为基元(正方形、矩形、梯形)。一种递归查看形状以确定最适合正多边形的方法。

见下图

黑色的形状是不规则的多边形,蓝色描绘了适合内部的所需的规则。左边的例子应该是直截了当的,但那是因为它是找到一个可以适合最大形状的矩形的情况。多边形的大小不确定(但假设它们的边数少于 32)我希望能够将多边形分解成几个规则的多边形 - 这就是我有点迷路的地方。

遗憾的是,我目前没有代码,因为我一直不知道最好的前进方向。该脚本将在纯 JavasScript 中完成。这不是家庭作业:)

首先,你需要检查你的多边形是凸的还是凹的。如果是后者,那么就需要把它看成几个凸多边形"put together",分别处理。 (您很容易想象一把大剪刀将多边形剪成几个较小的多边形)。完成此操作后,您将拥有一个多边形或多个多边形。

对于每一个多边形,计算多边形的重心点,(P(i), P((i + 1) mod n), G)会形成一个平凡的形式,三角形。这些三角形将解决您的问题。

如果你需要四个角的形状,那么四个连续的点组成一个四个角的形状。但是这种方法可能会在主多边形的中间留下一个较小的多边形,其中的角度数量较少,必须对其进行处理。