【问题标题】:how to fit polygon inside another polygon [closed]如何在另一个多边形内拟合多边形[关闭]
【发布时间】:2014-08-07 12:27:07
【问题描述】:

如下图所示,我有两个多边形。
左边是“粗多边形”,右边是“最终多边形”

现在,我正在寻找算法以将“最终多边形”以最佳最大值 规模 拟合到“粗糙多边形”中。

  • 您可以根据需要旋转以及翻译“最终多边形”。
  • 您无法执行单独的 x 维度y 维度 缩放。
  • 您只能执行统一缩放(其中 SxSy 的值相同)。

【问题讨论】:

  • 多边形是凸的吗?
  • @cerkiewny 您自己可以看到,它们不一定。
  • 听起来像是某种包装问题...您是否研究过包装不规则形状的算法?这可能是相关的,你可能会得到一些灵感,即。将形状近似为由较小的正方形组成以简化问题。我想虽然这个问题不是确定性的,所以你可能不得不寻找一个“足够好”的解决方案,而不是真正的解决方案。
  • @cerkiewny haha​​ha pr0n 多边形...

标签: algorithm


【解决方案1】:

这是通过详尽试验获得精​​确解决方案的可能攻击路线;只是想法。

我的猜测是,当有三个联系人时,一个解决方案就实现了。我的意思是任何一个多边形的三个顶点接触另一个多边形的边缘或相反。 (如果接触点少于三个,可以对内部多边形进行膨胀,使其进入第三个接触点。)

给定两个任意三角形,找到所有可能的三接触位置应该不难。

所以全局方案是从一个多边形中获取所有三元组的顶点/边,并获取另一个多边形的所有互补三元组。对于每种组合,暂时考虑您有三角形并找到可能的三接触位置。对于每个候选位置,检查内部多边形是否限制在外部多边形中。最后,保持最大比例因子的可接受解。

对于具有NM 边的多边形,将尝试O(N³M³) 配置,并且包含测试可能与O(NM) 一样昂贵。所以这种方法只适用于非常小的多边形。

【讨论】:

  • 这个最初的草图在细节上可能是错误的,但你明白了:找出有多少接触约束确实定义了一个极值解决方案,以及它们可以是什么类型(在顶点/边、边/顶点中) ,顶点/顶点或边/边)。然后尝试生成该数量接触的所有组合,找到相应的极值配置,并检查它们是否可以接受。
【解决方案2】:

将右侧多边形缩放 0.01。 (几何)

开始快速旋转它,它会画出圆圈。 (几何)

开始将刻度 0.01 增加 0.01。 (几何)

当它接触到外部多边形时停止。 (几何)

然后将它反弹到相反的方向,直到它再次反弹。 (物理)

一次又一次。(迭代)

直到它不能再次移动/弹跳。(最佳卡住)(物理)

如果出现错误的局部解决方案,请使用模拟退火。(您需要全局解决方案)

【讨论】:

  • 哈哈,转得真快,手都疼了。
  • 基本上,您是在建议一种不聪明、可能不准确、蛮力的方法,通过尝试和失败来寻找答案。我认为这不是 OP 正在寻找的。此外,如何保证第一次碰撞时会以最佳角度展开?
  • 如何从高处释放一个多边形,然后让它落在其他多边形的顶部。尝试 1000 次并获得最佳匹配? (只有不同​​的缩放比例,物理会自动处理其他变化)
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2014-04-05
  • 1970-01-01
相关资源
最近更新 更多