确定点列表是否适合“形成”?

时间:2012-10-02 07:39:39

标签: vector geometry 2d linear-algebra trigonometry

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

Formation

作为另一个输入,一个无序的2D点列表, P

Input

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

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

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

我考虑过在两个输入中的所有点之间取角度并比较它们,或计算和比较船体,但是每种方法似乎都受到其中一个约束的影响。

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

2 个答案:

答案 0 :(得分:2)

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

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

要点是用极坐标表示构造和点,原点位于地层/点集的中心。然后,在点和构造之间找到变换的旋转和缩放因子变得更加容易。通过比较点集和地层区集的平均值,可以轻松找到平移分量。

请注意,此方法会将您的形成区域视为方形或圆形,而不是圆弧区域。希望这是一个你可以忍受的软糖。

它也不会返回有效映射变换的精确缩放和旋转项。它为您提供地层区域和点之间的映射,以及最终旋转和缩放因子的良好近似。通过简单的松弛方案,可以非常快速地将该近似精炼成有效的解决方案。它也会很快忽略无效点集。

答案 1 :(得分:1)

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

对于每个点集和形成:

  1. 确定最相互较远的一对点,称之为A和B
  2. 确定通过A和B的线路最远的点,称之为C.确保C位于AB线的左侧 - 您可能需要交换A和B来实现此目的。
  3. 用A,B和C表示其余的点。这是一个简单的问题,即通过AB为每个点找到最近的点D,并缩放使得所有距离都是根据距离在A和B之间。从A到D的距离是你的相对x坐标,从D到点的距离是y。
  4. 例如,如果您发现A和B相距十个单位,并且C距离AB的中点5个单位,那么相对坐标将是: 答:(0,0) B:(1,0) C:(0.5,0.5)

    然后,您可以独立于全局坐标系比较点集和构造。请注意,找到匹配的距离公差也必须按照AB进行缩放。

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