【问题标题】:Mapping a polygon to another polygon将一个多边形映射到另一个多边形
【发布时间】:2012-06-10 02:26:36
【问题描述】:

假设我有两个带顶点的五边形,AB

(x1, y1), (x2, y2), ... (x5, y5) 为A

(x'1, y'1), ... (x'5,y'5子>)为B

我知道顶点的对应关系:

(x1, y1) (x'1, y'1 )

类似的所有顶点。

我需要一个程序将A 中的所有点转换为B

我在Transform quadrilateral into a rectangle? 中发现了类似的四边形问题。

就我而言,它们不是四边形,而是五边形。我实际上想要一个适用于任意数量顶点(五边形、六边形等)的解决方案。

【问题讨论】:

  • 多边形是严格凸的,并且顶点的三元组都是非共线的吗?我怀疑是否有一种通用算法可以将具有相同顶点数的点从一个多边形映射到另一个多边形,因为在大量退化情况下映射不会是双射的。
  • 多边形不一定是凸的,而是非共线的。我在alumni.media.mit.edu/~cwren/interpolator 找到了解决方案。但是,对于凹面的情况,(实际上也是凸面的)它不适用于超过 4 个顶点。
  • 理论太多了。但实际操作中,他的五边形会是凸的或近凸的,可以应用蜘蛛网拉伸算法,这里懒得解释了。
  • 好的,noname,你在我打字的时候发表了评论。在凹面情况下,您实际上需要决定如何在各种凹面畸形五边形中始终如一地找到蜘蛛网中心。之后,剩下的就简单了。
  • 感谢 Blender 和 Boris。目前还不知道怎么用蜘蛛网,不过我还是去看看吧。

标签: math graphics geometry computer-vision linear-algebra


【解决方案1】:

如果您将三角形映射到三角形,您将使用barycentric coordinates

为了将多边形映射到多边形,您可以使用广义重心坐标。这些有好几个家族。在this paperfollowup 中引入了这些族之一——平均值坐标。可以在here 找到关于过去十年爆炸式增长的整个主题的良好参考书目。另一篇描述所谓谐波和 Wachpress 坐标的早期论文是here

【讨论】:

    【解决方案2】:

    我认为您只需将多边形径向细分为三角形(从中心制作披萨片,延伸到顶点),然后找到原始多边形中任意点的(u, v) 坐标。

    一旦您掌握了这些信息,在第二个多边形中找到对应的三角形就很简单了(您已经知道哪些点构成了它的顶点),并且三角形的(u, v) 映射有据可查。

    【讨论】:

    • 你的问题在于“径向”这个词——你如何找到中心?有凹面的情况,你知道的。他的五边形不是披萨,请阅读上面的 cmets。
    • 我不认为凹面/凸面情况有什么不同。在每种情况下,三角形的映射都相同(但是,如果您的三角形退化,事情就会崩溃)。至于中心,只要找到质心:en.wikipedia.org/wiki/Centroid#Centroid_of_polygon
    • 如果质心在五边形之外怎么办?然后你可以最终将一个点映射到一个内部的点,比如说另一个凸五边形。我不认为这是 noname 想要的。
    • 如果多边形是凸的,它如何从外映射到内(反之亦然)?
    • “多边形不一定是凸的,而是非共线的”——引用提问者的话。
    【解决方案3】:

    我会建议,但我无法证明,对于五边形(但可能不是六边形和更高 n 的多边形),当为每个顶点着色时,您可以从该顶点看到五边形内部的一组点,那么它们的交点将始终为非空,您可以从该交点任意选择蜘蛛网的中心(或变形的披萨,如果您愿意),然后使用三角形映射。

    【讨论】:

    • 另外,我相信虽然你不能将这种方法用于凹六边形,但我相信它适用于两个“蜘蛛网中心”,七边形与 3,八边形与 4 等。我希望我的直觉在这里没有错。我写的够清楚吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2021-06-20
    • 2021-06-20
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多