请问这个变型公式怎麽计算?

读过此好文之後(图片向前变形)
http://blog.csdn.net/jia_zhengshen/article/details/12008371
感到非常有兴趣,实际做了之後发现那个公式似乎有难度,请教了几个数学比较好的朋友,他们也算不出来,请问中间那个变形公式是否要解出X(变形後位置)?该如何解?

至于与你另一问中相同的“请问中间那个变形公式是否要解出X(变形後位置)?"
我重申一次,变形后的点 X 是自变量,不存在解出问题(从代码中就可看出)

先看一个效果图

右半边是原图,左半边是 10 次迭代后的结果
观察到你的 php 水平也不错,所以给了个 php 的示例代码

 $fn = 'C:/Documents and Settings/Administrator/桌面/00.jpg';
$sm = imagecreatefromjpeg($fn);
$w = imagesx($sm);
$h = imagesy($sm);
$im = imagecreatetruecolor( $w * 2 + 10, $h);
imagecopy($im, $sm, 0, 0, 0, 0, $w, $h);
imagecopy($im, $sm, $w + 10, 0, 0, 0, $w, $h);

//起点坐标
$cx = 190;
$cy = 100;
//终点坐标
$mx = 190;
$my = 120;
//工作半径
$rmax = 60;

//中间量
for($i=0; $i<10; $i++) {
  foo($im, $rmax, $cx, $cy, $cx+1, $cy-1, $k=1);
  $cx++;
  $cy--;
  $rmax -= 4;
}

function foo($im, $rmax, $cx, $cy, $mx, $my, $k) {
  $r = $rmax * $rmax;
  $mcx = $mx - $cx;
  $mcy = $my - $cy;
  for($x=$cx-$rmax; $x<$cx+$rmax; $x++) {
    $dx = ($x - $cx) * ($x - $cx);
    if($r - $dx + $mcx * $mcx)
      $ux = $x - pow(($r - $dx) / ($r - $dx + $k * $mcx * $mcx), 2) * $mcx;
    else
      $ux = $x - $mcx;
    for($y=$cy-$rmax; $y<$cy+$rmax; $y++) {
      if($r < ($x-$cx)*($x-$cx) + ($y-$cy)*($y-$cy)) continue;
      $dy = ($y - $cy) * ($y - $cy);
      if(($r - $dy + $mcy * $mcy)) $uy = $y - pow(($r - $dy) / ($r - $dy + $k * $mcy * $mcy), 2) * $mcy;
      else $uy = $y - $mcy;
      $t = [];
      $t[] = imagecolorsforindex($im, imagecolorat($im, floor($ux), floor($uy)));
      $t[] = imagecolorsforindex($im, imagecolorat($im, floor($ux), ceil($uy)));
      $t[] = imagecolorsforindex($im, imagecolorat($im, ceil($ux), floor($uy)));
      $t[] = imagecolorsforindex($im, imagecolorat($im, ceil($ux), ceil($uy)));
      $red = $green = $blue = $alpha = 0; 
      foreach($t as $v) {
        $red += $v['red'];
        $green += $v['green'];
        $blue += $v['blue'];
        $alpha += $v['alpha'];
      }
      $red /= 4;
      $green /= 4;
      $blue /= 4;
      $alpha /= 4;

      $res[] = array($x, $y, imagecolorclosestalpha($im, $red, $green, $blue, $alpha));
    }
  }
  foreach($res as $v) {
    imagesetpixel($im, $v[0] + $mcx, $v[1] + $mcy, $v[2]);
  }

}
imagepng($im);

插值算法比较粗糙,所以变形的部分有些模糊

谢谢 xuzuning 的回答

不太清楚自变量的意思,从要达到的目的来看,我们不就是要求出X(移动後座标)的位置
然後将U(移动前座标)移动到X吗?在那个公式中,除了X是未知变数外,其他都是已知
如果不求X那要求的是什麽呢?

我想要再询问您有关那个公式的问题,需要再另开题目给C币吗?

非常感谢您的PHP范例,会仔细看一遍,谢谢!