【问题标题】:Determining if a list of points fit a "formation"?确定点列表是否适合“编队”?
【发布时间】:2012-10-02 07:39:39
【问题描述】:

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

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

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

地层和点输入都没有任何特定的起源,并且两者之间的比例不要求相同,例如,地层可以描述一公里的区域,输入点可以描述一个区域一厘米。最后,我需要知道哪个点最终在结构中的哪个节点中。

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

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

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

【问题讨论】:

  • 乍一看,这听起来像是点集可能变换空间的优化问题(缩放、旋转、平移?),优化数量和质量(到四边形/圆中心的距离)的比赛。

标签: vector geometry 2d linear-algebra trigonometry


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 该应用程序处理所有地方的极坐标,我已经在计算质心。出于某种原因,我没有想到这一点。感谢您为此付出的时间,这听起来完全是一个可行的解决方案。
【解决方案2】:

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

对于每个点集和阵型:

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

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

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

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

【讨论】:

  • 这是一个聪明的想法,也是我尝试过的方法之一。我的输入编队中大约有一半具有几乎对称的(在公差范围内)凸包,而整个编队则不是。找到一个明确的最远段确实变得混乱。再说一次,对于这一点很明显的阵型(如所呈现的阵型),它确实会在不匹配点输入的情况下快速失败。我认为搜索可以为 A、B 和 C 做出合理选择的组合是易于处理的,因为我的大多数输入形式和点集最多有 8 个点。
猜你喜欢
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多