2

作为输入,我有一个任意的“格式”,它是一个矩形列表F

形成

作为另一个输入,二维点的无序列表P

输入

在这个例子中,我认为PF匹配,因为如果P逆时针旋转 45°,则F中的每个矩形都将通过包含一个点来满足。如果P中有一个不属于矩形的无关点,它也将被视为匹配。

编队和输入点都没有任何特定的起源,两者之间的比例也不需要相同,例如编队可以描述一公里的面积,输入点可以描述一厘米的面积. 最后,我需要知道哪个点最终出现在编队的哪个节点中。

我正在尝试开发一种满足所有这些约束的通用算法。它将每秒针对大型位置信息数据库执行数百万次,因此我试图尽快“失败”。

我考虑过获取两个输入中所有点之间的角度并比较它们,或者计算和比较船体,但是每种方法似乎都因其中一个约束而分崩离析。

地层中的点也可以很容易地表示为具有 x,y 原点和公差半径的圆,这似乎简化了我迄今为止尝试过的方法。我会很感激任何可靠的攻击计划或啊哈!见解。

4

2 回答 2

2

我有另一个想法——这次使用极坐标。

描述变得复杂/模棱两可,所以这里有一些代码希望能说明这个想法。

要点是用极坐标来表达阵型和点,原点在阵型/点集的中心。然后,找到点和地层之间变换的旋转和缩放因子变得容易得多。通过比较点集和形成区域集的平均值,可以很容易地找到平移分量。

请注意,这种方法不会将您的编队区域视为正方形或圆形,而是将其视为圆段的一部分。希望这是一个你可以忍受的软糖。

它也不会返回有效映射变换的精确缩放和旋转项。它将为提供形成区域和点之间的映射,以及最终旋转和缩放因子的良好近似值。这种近似可以通过一个简单的松弛方案很快地细化为一个有效的解决方案。它还将迅速忽略无效的点集。

于 2012-10-05T14:24:16.837 回答
1

一种方法是在相对坐标系中表达点集和结构。

对于每个点集和阵型:

  1. 识别最相距的一对点,称它们为 A 和 B
  2. 通过 A 和 B 确定离线最远的点,将其称为 C。确保 C 位于 AB 线的左侧 - 您可能需要交换 A 和 B 才能做到这一点。
  3. 用 A、B 和 C 表示其余的点。这是一个简单的问题,即在通过 AB 的线上为每个点找到最近的点 D,然后缩放以使所有距离都以 A 和 C 之间的距离表示B. A 到 D 的距离是你的相对 x 坐标,D 到该点的距离是 y。

例如,如果您发现 A 和 B 相距十个单位,而 C 距离 AB 的中点 5 个单位,则相对坐标将为: A: (0,0) B: (1,0) C : (0.5,0.5)

然后,您可以独立于全局坐标系比较点集和地层。请注意,找到匹配项的距离容差也必须根据 AB 进行缩放。

我可以很容易地想象这种方法的问题形成,其中 A、B 和 C 的选择很难明确地做出,但这是一个开始。

于 2012-10-04T08:28:11.360 回答