作为输入,我有一个任意的“形成”,这是一个矩形列表, F :
作为另一个输入,一个无序的2D点列表, P :
在这个例子中,我认为 P 与匹配形成 F ,因为如果 P 是逆时针旋转45°, F 中的每个矩形将通过包含一个点来满足。如果 P 中有一个不属于矩形的无关点,它也会被视为匹配。
地层和点输入都没有任何特定的起源,并且两者之间的比例不需要相同,例如,地层可以描述一公里的区域,输入点可以描述一个区域一厘米最后,我需要知道哪个点最终位于中节点中的节点。
我正在尝试开发一种满足所有这些约束的通用算法。对于大型位置信息数据库,它每秒会执行数百万次,所以我试图尽快“失败”。
我考虑过在两个输入中的所有点之间取角度并比较它们,或计算和比较船体,但是每种方法似乎都受到其中一个约束的影响。
地层中的点也可以很容易地表示为具有x,y原点和公差半径的圆,这似乎简化了我迄今为止尝试过的方法。我很欣赏任何可靠的攻击计划或 A-Ha!见解。
答案 0 :(得分:2)
我有另一个想法 - 这次使用极坐标。
描述变得复杂/模棱两可,所以here是一些有希望说明这个想法的代码。
要点是用极坐标表示构造和点,原点位于地层/点集的中心。然后,在点和构造之间找到变换的旋转和缩放因子变得更加容易。通过比较点集和地层区集的平均值,可以轻松找到平移分量。
请注意,此方法会将您的形成区域视为方形或圆形,而不是圆弧区域。希望这是一个你可以忍受的软糖。
它也不会返回有效映射变换的精确缩放和旋转项。它将为您提供地层区域和点之间的映射,以及最终旋转和缩放因子的良好近似。通过简单的松弛方案,可以非常快速地将该近似精炼成有效的解决方案。它也会很快忽略无效点集。
答案 1 :(得分:1)
一种方法是在相对坐标系中表达点集和构造。
对于每个点集和形成:
例如,如果您发现A和B相距十个单位,并且C距离AB的中点5个单位,那么相对坐标将是: 答:(0,0) B:(1,0) C:(0.5,0.5)
然后,您可以独立于全局坐标系比较点集和构造。请注意,找到匹配的距离公差也必须按照AB进行缩放。
我很容易想象这种方法的问题形成,其中A,B和C的选择难以明确,但这是一个开始。