读过此好文之後(图片向前变形)
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范例,会仔细看一遍,谢谢!