我正在寻找一种算法或经过尝试和测试的方法来分析不规则多边形并将其简化为基元(正方形、矩形、梯形)。一种递归地检查形状以确定最适合正多边形的方法。
看图片
黑色形状是不规则多边形,蓝色表示所需的规则多边形,适合放入内部。左边的例子应该很简单,但那是因为它是找到可以容纳最大形状的矩形的情况。多边形的大小不确定(但假设它们的边数少于 32 条)我希望能够将多边形分解为几个常规的多边形 - 这就是我有点迷失的地方。
遗憾的是,我目前没有代码,因为我一直想知道最好的前进方向。该脚本将使用纯 JavaScript 完成。这不是家庭作业:)
最佳答案
首先,您需要检查您的多边形是凸多边形还是凹多边形。如果是后者,那么你需要将其视为几个凸多边形“放在一起”并分别处理。 (您很容易想象一把大剪刀将多边形切成几个较小的多边形)。完成此操作后,您要么拥有一个多边形,要么拥有多个多边形。
对于每个多边形,计算多边形的重心,(P(i), P((i + 1) mod n), G) 将形成一个简单的形式,即三 Angular 形。这些三 Angular 形将解决您的问题。
如果您需要具有四个 Angular 的形状,则四个连续的点形成四个 Angular 的形状。但这种方法可能会给您留下一个较小的多边形,主多边形中间的 Angular 数量较少,这必须进行处理。
关于javascript - 将二维不规则形状简化为规则基元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706228/