Geometry 什么';将一个二维多边形完全置于另一个多边形内的平移是什么?

Geometry 什么';将一个二维多边形完全置于另一个多边形内的平移是什么?,geometry,Geometry,给定两个二维多边形,如何计算使第一个多边形进入第二个多边形的最短平移 假设存在一个解决方案(即第一个方案实际上与第二个方案相适应) 与解决方案的完整性相比,更喜欢简单的算法。例如,如果通过假设形状具有一定数量的边、是凹形等来简化算法,则进行这些假设 我可以想象一个蛮力解决方案,首先计算出位于初始多边形外的违规顶点。然后,我将遍历这些外部顶点,并找到离每个顶点最近的边。那我就卡住了。从外部顶点到边的每个距离都会创建一个约束(“需要移动”)。然后,我需要解决这个约束系统,以找到在不产生任何新违规的情

给定两个二维多边形,如何计算使第一个多边形进入第二个多边形的最短平移

  • 假设存在一个解决方案(即第一个方案实际上与第二个方案相适应)
  • 与解决方案的完整性相比,更喜欢简单的算法。例如,如果通过假设形状具有一定数量的边、是凹形等来简化算法,则进行这些假设
    我可以想象一个蛮力解决方案,首先计算出位于初始多边形外的违规顶点。然后,我将遍历这些外部顶点,并找到离每个顶点最近的边。那我就卡住了。从外部顶点到边的每个距离都会创建一个约束(“需要移动”)。然后,我需要解决这个约束系统,以找到在不产生任何新违规的情况下实现所有约束的运动

    我不确定这是否是一个通用的解决方案,但这里至少有一点需要开始: 我们要将绿色多边形移动到红色多边形中。我们使用几种翻译。每个翻译都由一个起点和一个终点定义

    步骤1:起点是绿色多边形中最左侧顶点和最右侧顶点之间的中点。终点,与红色多边形的标准相同:

    步骤2:起点是最高顶点和最低顶点之间的中点。终点,与红色多边形的标准相同:

    请注意,SETP 1和2是一种居中设置。使用中点的此方法类似于使用边界框。另一种方法是使用外接圆,但它们很难得到

    步骤3:在红色多边形中找到最靠近绿色多边形中边的顶点。您将需要对所有这些进行迭代。找到与该边垂直的线:

    嗯,这并不完美。根据给定的多边形,最好以另一种方式进行:绿色的最近顶点到红色的边。选择最小的距离

    最后,沿该线移动绿色多边形:


    如果此方法不起作用(我确信在某些情况下它会失败),那么也可以沿解决问题的直线(红色边或垂直线)移动内部多边形。然后继续前进,直到没有发现任何问题。

    到目前为止你有什么想法?换句话说,SO并不意味着要做你的家庭作业。使用平分线可以节省整个顶点迭代,这真的很优雅。难道你不能叠加形状的质心来达到相似的效果吗?即,步骤1和2是“执行对齐质心的平移”。我想计算质心会很昂贵,质心的计算是(x,y)的加权平均值,而不是很昂贵。边界框、外圆、质心,。。。我认为没有规则多边形是不完美的。