Vector 确定点列表是否符合;形成;?

Vector 确定点列表是否符合;形成;?,vector,geometry,2d,linear-algebra,trigonometry,Vector,Geometry,2d,Linear Algebra,Trigonometry,作为输入,我有一个任意的“结构”,它是一个矩形列表,F: 作为另一个输入,2D点的无序列表,p: 在这个例子中,我认为P匹配地层F,因为如果P是逆时针旋转45°,F中的每个矩形将包含一个点来满足。如果P中有一个不属于矩形的无关点,则也将被视为匹配 编队和点输入都没有任何特定的原点,并且两者之间的比例不需要相同,例如编队可以描述一公里的面积,输入点可以描述一厘米的面积。最后,我需要知道哪个点在队形的哪个节点结束 我正试图开发一种通用算法,满足所有这些约束条件。它将以每秒数百万次的速度在一个包含

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

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

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

编队和点输入都没有任何特定的原点,并且两者之间的比例不需要相同,例如编队可以描述一公里的面积,输入点可以描述一厘米的面积。最后,我需要知道哪个点在队形的哪个节点结束

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

我考虑过在两个输入中取所有点之间的角度并进行比较,或者计算和比较外壳,但每种方法似乎都会因其中一个约束条件而崩溃


队形中的点也可以很容易地表示为具有x、y原点和公差半径的圆,这似乎简化了我迄今为止尝试的方法。我希望你能给我一个好的进攻计划,哈哈!洞察。

一种方法是在相对坐标系中表示点集和地层

对于每个点集和形状:

  • 确定相互距离最远的一对点,称它们为A和B
  • 通过A和B确定距离直线最远的点,称之为C。确保C位于直线AB的左侧-您可能需要交换A和B以实现此目的
  • 用A、B和C表示其余的点。这是一个简单的问题,通过AB为每个点找到直线上最近的点D,并进行缩放,使所有距离都以A和B之间的距离表示。从A到D的距离是相对x坐标,从D到点的距离是y坐标
  • 例如,如果发现A和B相距10个单位,而C距离AB中点5个单位,则相对坐标为: A:(0,0) B:(1,0) C:(0.5,0.5)

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


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

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

    描述变得复杂/模棱两可,一些代码也很有希望说明这个想法

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

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


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

    乍一看,这听起来像是点集可能变换空间上的优化问题(缩放、旋转、平移?),优化匹配的数量和质量(到四元/圆心的距离)。这是一个聪明的想法,也是我尝试过的方法之一。我的输入编队中大约有一半具有几乎对称(在公差范围内)的凸面外壳,而编队作为一个整体不是。找到一个明确的最远的部分确实会变得混乱。同样,对于这种情况很明显的编队(如所示),它确实会在非匹配点输入的情况下很快失效。我认为搜索能够为A、B和C做出合理选择的组合是容易处理的,因为我的大多数输入结构和点集最多有8个点。该应用程序处理各地的极坐标,我已经在计算质心。由于某种原因,我没有想到这一点。谢谢你花了这么多时间,这听起来像是一个可行的解决方案。