geometry - 如何匹配 2D 框的几何模板以适应另一组 2D 框
问题描述
我正在尝试在具有坐标 (A) 的一组 2D 框(从具有已知大小和框之间距离的模板)与另一组具有坐标 (B) 的 2D 框(可能包含比 A 更多的框)之间找到匹配项)。它们应该根据 A 中的每个框对应于 B 中的单个框来匹配。A 中的框一起形成一个“印章”,该“印章”至少在一个维度上是不对称的。
解释:插图中的“斯坦兹”是 A 组中的一个盒子。
甚至可以将 Set A 视为仅 2D 点(框的中心点)以使其更简单。
最终的结果将是知道哪个 A 框对应哪个 B 框。
我只能想到非常具体的方法,针对特定的盒子布局量身定制,是否有任何已知的通用方法来处理这种形式的匹配/搜索问题,它们叫什么?
编辑:可能的解决方案
我提出了一种可能的解决方案,为集合 A 中的单个框在每个可能的 B 中心位置寻找所有可能的旋转。在这里,A 中的所有点都将被旋转并与到 B 中心的距离进行比较。不确定这是否是一个好方法。
解决方案
在您的示例中,模板及其在 B 中的存在之间的转换可以由两个匹配点完全定义(实际上是过度定义)。
所以这是一个简单的方法,它是一种高性能。首先,将 B 中的所有点放入 kD-tree 中。现在,在 A 中选择一个规范的“第一”点,并假设将其与 B 中的每个点匹配。要检查它是否与 B 中的特定点匹配,请在 A 中选择一个规范的“第二”点并测量它到“第一”点。然后,使用标准的 kD 邻近边界查询来查找 B 中的所有点,这些点与 B 中假设的匹配“第一个”点的距离大致相同。对于每个点,确定 A 和 B 之间的转换,以及对于每个点A 中的其他点,确定 A 中的点是否在大致正确的位置(同样,使用 kD-tree),与第一个不匹配的点提前出局。
对于病理情况(我认为),那里的最坏情况性能可能会变得非常糟糕,O(n^3 log n)
但总的来说,我预计O(n log n)
对于具有低阈值的表现良好的数据来说大致是这样。请注意,阈值处理有点粗略,结果可能取决于您对“第一”和“第二”点的选择。
推荐阅读
- autodesk-forge - Forge Post Job Docs 与目的地的潜在错误
- ios - 如果 ViewController 嵌入在 NavigationController 中,则无法隐藏状态栏
- python-3.x - 如何合并位于两个不同文件夹中的多个文本文件并在 python 中的组合文件中创建一个新列?
- perl - 制作一次性引导脚本
- python - 调用函数时如何修复“标识符中的无效字符”
- laravel - 找不到我的页面,有人可以帮我吗?
- java - 通过 JoranConfigurator 加载 logback-spring.xml 时未读取 springProfile
- git - 将更改和添加的文件从没有工作树的裸仓库导出到目录以进行编译或部署
- r - 如何使用 lappy 进行字符串替换
- node.js - NodeJS 和 ReactJS 的 Heroku 部署