algorithm - 将n组顶点减少为矩形?
问题描述
我试图将一组n个顶点减少到m个矩形(点不在网格上,并且是用户定义的)。
最简单的情况是检查 4 个节点,并确认唯一距离少于 3 个,这将导致 1 个矩形形状。但是,考虑到每个顶点子集形成一个矩形,我希望将n个顶点减少为多个矩形。我很高兴矩形是对角的,并且不介意它是否只是一个矩形的近似值(例如,它悬挂在一个顶点上以形成一个矩形)。我也很高兴形状重叠。
当前输入是用户定义的:
- 用户单击以放置“节点”,可以连接节点以创建“边”(每条边最多 2 个节点,但每个节点有多个边)。
- 节点的每个“边”都有一个开始和结束位置(创建它的两个节点)
- 用户点击可以是非网格的,也可以是网格上的(网格大小是用户定义的,所以遗憾的是没有洪水填充算法)
我已经确定了一个合理的解决方案:
- 在节点集中选择随机边
- 在所有边上使用A Star算法,所选边是开始和结束位置,但不允许算法在第一个实例中遍历该边
- 如果有返回边缘的路径,我们发现了一个封闭的形状
- 字符串拉取结果路径(即简化路径,删除同一行上的节点/边以减少路径数)
- 对矩形进行有效性检查,例如不超过 3 个唯一距离
- 对未包含在该路径中的任何节点重复该过程
不幸的是,这对我的应用程序来说在计算上是相当昂贵的,我希望在运行时做到这一点。有没有人有任何改进上述方法的建议,或者知道另一种更好的方法?
解决方案
推荐阅读
- xml - ORA-31011: XML 解析失败
- scala - 如何创建一个可以应用于两个包含相同参数的一个或多个类型的泛型函数?
- python - 如何使用 Telethon 导出群组历史记录
- java - 如何将数据临时保存在某处并每 10 分钟将其存储在数据库中?
- sql - 雪花内连接比左连接性能差
- powershell - 使用 PowerShell 获取 GPO 的所有权/更改权限
- python - 如何找到实例化 Python 类对象的输入参数?
- java - 当我们只能使用默认构造函数时,我们是否应该更喜欢组合而不是继承
- python - 使用 Python 将数据从 CSV 和 PDF 复制到 HDF5
- primefaces - keyFilter 去除特殊字符