3D效果扭曲纸张

时间:2010-04-05 23:18:30

标签: image math image-processing 3d

由于我没有样本,这可能有点难以描述。我试图在PHP或类似语言中找到数学函数或完整的3d函数,可以帮助我实现以下效果:

想象一下,如果你要拿一张平板或纸,并将它粘在一杯水上。它不会再扁平了。它会有一条曲线,其中一条边可能会略微隐藏。

任何人都可以在网上找到一个可以找到这些功能的好图书馆或资源吗?

1 个答案:

答案 0 :(得分:2)

让我们说你纸张的中心是x = 0,你的圆柱体沿着y轴是垂直的。纸张上的x坐标可以等于圆柱表面上的弧长。弧长(s)等于半径的角度(以弧度表示)。给出了半径,因此您可以根据弧长和半径计算角度。角度=弧长/半径。由于现在有角度和半径,因此可以计算新的x偏移量,即(半径* cos(角度))。所以你的映射函数将是:

  • new_x = radius * cos(old_x / radius)
  • new_y = old_y; // y坐标不会改变
  • new_z = radius * sin(old_x / radius);

你必须强制执行边界(在纸上保持x,并确保它不超过圆周的一半(x必须小于或等于PI * r)。另外,注意标志......特别是z坐标,取决于您的坐标系是右手还是左手,或者您想象纸张从圆柱面(背面或正面)开始。最后,您可以使用标准矩阵变换来移动和定位一旦有了扭曲的坐标,就可以在3D空间中找到纸张/圆柱体。