javascript - 将二维不规则形状简化为规则基元

标签 javascript 2d polygon shapes

我正在寻找一种算法或经过尝试和测试的方法来分析不规则多边形并将其简化为基元(正方形、矩形、梯形)。一种递归地检查形状以确定最适合正多边形的方法。

看图片

irregular shapes

黑色形状是不规则多边形,蓝色表示所需的规则多边形,适合放入内部。左边的例子应该很简单,但那是因为它是找到可以容纳最大形状的矩形的情况。多边形的大小不确定(但假设它们的边数少于 32 条)我希望能够将多边形分解为几个常规的多边形 - 这就是我有点迷失的地方。

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

最佳答案

首先,您需要检查您的多边形是凸多边形还是凹多边形。如果是后者,那么你需要将其视为几个凸多边形“放在一起”并分别处理。 (您很容易想象一把大剪刀将多边形切成几个较小的多边形)。完成此操作后,您要么拥有一个多边形,要么拥有多个多边形。

对于每个多边形,计算多边形的重心,(P(i), P((i + 1) mod n), G) 将形成一个简单的形式,即三 Angular 形。这些三 Angular 形将解决您的问题。

如果您需要具有四个 Angular 的形状,则四个连续的点形成四个 Angular 的形状。但这种方法可能会给您留下一个较小的多边形,主多边形中间的 Angular 数量较少,这必须进行处理。

关于javascript - 将二维不规则形状简化为规则基元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706228/

相关文章:

javascript - Mono:如何使用 javascript 和 jquery 使用 Web 服务?

MySQL 5.7.19 向函数 st_geometryfromtext 提供的 GIS 数据无效

R:多边形组合算法

c++ - 简单的二维碰撞检测c++

java - libgdx box2d body - 如何通过给定的力或速度、距离和时间移动 body

c++ - 在波前对象文件 (.obj) 中,我应该如何在 opengl 中渲染具有 4 个以上顶点的面?

javascript - Jquery 获取更改选项的文本值

javascript - d3js 图表区域外的网格

javascript - 当我们调用 web api 函数时,javascript 会创建执行上下文吗?

c# - Unity - 像音速一样运行一个循环而不会掉下来