当前位置: 首页 > 知识库问答 >
问题:

什么样的平移使一个二维多边形完全位于另一个多边形内?

芮歌者
2023-03-14

给定两个2D多边形,如何计算将第一个带入第二个的最短平移?

  1. 假设有一个解决方案(即第一个确实适合第二个)
  2. 比起解决方案的完整性,更喜欢简单的算法。例如,如果通过假设形状有一定数量的边、是凹形等来简化算法,那么就做出这些假设

我可以想象一个蛮力解决方案,我首先计算哪些是位于初始多边形之外的违规顶点。然后迭代这些外部顶点,找到最接近每个顶点的边。那我就卡住了。从外部顶点到边缘的每个距离都会产生一个约束(“需要移动”)。然后,我需要解决这个约束系统,以找到满足所有约束的运动,而不会产生任何新的违反。

共有1个答案

邵旺
2023-03-14

我不确定这是否是一个普遍的解决方案,但这里至少有一点可以开始:

我们想把绿色的多边形变成红色的多边形。我们使用几种翻译。每个翻译都有一个起点和一个终点。

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

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

注意,setps 1

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

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

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

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

 类似资料:
  • 我正在做一个minecraft-ish游戏,我在vbos上做了更多的工作。然而在一个vbo中绘制多个面时,我似乎有点问题。 以下是我的vbo生成代码: 下面是我用来绘制vbo的代码: 这是我想要的结果(在每个vbo中使用一个四边形): 不幸的是,我还是新来的,所以你必须点击这个链接:/ 下面是我在每个vbo中使用多个四边形得到的结果: 形象 那么为什么我要在一个vbo中绘制多个四边形呢?一个词:性

  • 我有两个形状多边形实例(由lon,lat点组成),在不同的部分相交。我试图遍历,确定两个多边形之间是否有交集,然后创建一个新的多边形,排除该交集。从所附的图像来看,我基本上不希望红色的圆圈与黄色的轮廓重叠,我希望边缘正好是黄色轮廓开始的地方。 我已经尝试按照这里的说明,但它根本没有改变我的输出,而且我不想将它们合并到一个级联的联合中。我没有得到任何错误消息,但是当我将这些多边形添加到一个KML文件

  • 我已经画了一个正方形,但是我怎样才能在它旁边放置另一个正方形而没有任何空隙呢?我认为< code>mRedRect1F中的第一个参数(0)需要更改,但我不知道该更改什么。 使现代化

  • 本文向大家介绍用css画一个五边形和一个六边形相关面试题,主要包含被问及用css画一个五边形和一个六边形时的应答技巧和注意事项,需要的朋友参考一下 还有 svg 转 base64 作背景图。 当然,点击范围可能会不符合需求。 另外提一句,clip-path 边框要另做,元素选择的背景图要另做,两种都不好做圆角。

  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多