我想编写一个程序,让我通过拖动其顶点来任意扭曲纹理多边形。假设新多边形不与自身相交,我希望纹理流畅地扭曲且不重叠。我还应该能够以新的形状重复这个过程,并且损失最少。
有没有这样做的算法?
我想编写一个程序,让我通过拖动其顶点来任意扭曲纹理多边形。假设新多边形不与自身相交,我希望纹理流畅地扭曲且不重叠。我还应该能够以新的形状重复这个过程,并且损失最少。
有没有这样做的算法?
在过去的一两年里,人们一直在努力解决这个问题,并且最先进的技术不断变得越来越好(但数学也变得越来越难)。一个很好的起点(以及我停止关注它的地方)是工作http://www.cs.technion.ac.il/~weber/Publications/Complex-Coordinates/
阅读那里的论文,并在参考文献中查找论文。其中一个应该给你一个你愿意实现的算法。
听起来您可能想要Schwarz-Christoffel 映射的变体。这是一种保形映射,可用于将多边形扭曲到更简单的区域(如圆盘)或从更简单的区域扭曲;虽然我没有实现它,但显然它在计算上是易于处理的。
对于您的应用程序,您将设置从原始多边形到更简单区域的映射,并计算到修改多边形的逆映射;将两者结合起来应该可以为您提供从原始多边形到修改后的多边形的良好保形映射。
保形映射很好而且很平滑,但它们有时会表现得不直观;我可以想象动画版本可能会产生一些有趣的“滑动”效果。保形映射将保留多边形内部的局部角度;这意味着非常接近修改的顶点的尺寸失真可能很严重。
我能想到的最简单的方法是对输入多边形进行三角测量(使用剪耳法或类似的方法),然后移动这些点。然后,您可以使用从原始多边形到新空间的重心映射。
如果您正在寻找更强大的东西,您可能会查看平均值坐标。