2010-02-19 42 views
1

我想编写一个程序,让我通过拖动它的顶点来任意扭曲纹理多边形。假设新多边形本身不相交,我希望纹理流畅地变形并且没有重叠。我还应该能够用新的形状重复这个过程,并且损失量最小。如何随意扭曲纹理多边形?

有没有这样做的算法?

+0

这是用于实时应用还是较慢的技术也适合?对多边形中的点数有任何限制?它保证凸? – tfinniga 2010-02-19 18:12:38

+0

较慢的技术很好。点数没有限制,尽管它不会太高。凹面多边形是允许和预期的。 – Archagon 2010-02-19 19:57:32

+0

另外,它不一定是实际的纹理。它可能只是多边形内的多个连接点,尽管总体思路是相同的。 – Archagon 2010-02-19 20:10:39

回答

0

我能想到的最简单的方法是对输入多边形进行三角测量(使用耳廓修剪方法或类似的方法),然后移动这些点。然后,您可以使用从原始多边形到新空间的重心映射。

如果您正在寻找更强大的功能,您可以查看平均值坐标。

1

这听起来像你可能想在Schwarz-Christoffel mapping变化。这是一种保形映射,可以用来将多边形与一个更简单的区域(如磁盘)进行翘曲;尽管我没有实现它,但显然它在计算上易于处理。

对于您的应用程序,您可以设置从原始多边形到简单区域的映射,并计算修改后的多边形的反向映射;结合这两个应该给你一个从原始到修改的多边形的很好的保形映射。

保形映射很好,很流畅,但它们有时可能以不直观的方式表现;我可以想象一个动画版本可能会产生一些有趣的“滑稽”效果。保形映射将保持多边形内部的局部角度;这意味着非常靠近修改顶点的尺寸失真可能很严重。

1

在过去的一二十年里,人们一直致力于解决这个问题,并且最先进的技术水平不断提高(但数学也越来越难)。一个开始的好地方(以及我停下来的地方)是工作http://www.cs.technion.ac.il/~weber/Publications/Complex-Coordinates/

阅读那里的纸张,并查阅参考文献中的论文。其中一个应该给你一个你愿意实现的算法。