2013年1月19日土曜日

アフィン変換行列を求めるのに必要な連立方程式をphpで解く

結構めんどくさいんですが、一度書いてやれば使いまわせます。

$pointには0~2までx1→x2、y1→y2という座標点の対応を入れる前提です。


// アフィン変換の未知数
$a = '';
$b = '';
$c = '';
$d = '';
$l = '';
$m = '';
// 連立方程式を解く
$a = ($point[0]['x2'] * $point[1]['y1'] + $point[1]['x2'] * $point[2]['y1'] + $point[2]['x2'] * $point[0]['y1'] - $point[0]['x2'] * $point[2]['y1'] - $point[1]['x2'] * $point[0]['y1'] - $point[2]['x2'] * $point[1]['y1']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
$b = ($point[0]['x1'] * $point[1]['x2'] + $point[1]['x1'] * $point[2]['x2'] + $point[2]['x1'] * $point[0]['x2'] - $point[0]['x1'] * $point[2]['x2'] - $point[1]['x1'] * $point[0]['x2'] - $point[2]['x1'] * $point[1]['x2']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
$l = ($point[0]['x1'] * $point[1]['y1'] * $point[2]['x2'] + $point[1]['x1'] * $point[2]['y1'] * $point[0]['x2'] + $point[2]['x1'] * $point[0]['y1'] * $point[1]['x2'] - $point[0]['x1'] * $point[2]['y1'] * $point[1]['x2'] - $point[1]['x1'] * $point[0]['y1'] * $point[2]['x2'] - $point[2]['x1'] * $point[1]['y1'] * $point[0]['x2']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
$c = ($point[0]['y2'] * $point[1]['y1'] + $point[1]['y2'] * $point[2]['y1'] + $point[2]['y2'] * $point[0]['y1'] - $point[0]['y2'] * $point[2]['y1'] - $point[1]['y2'] * $point[0]['y1'] - $point[2]['y2'] * $point[1]['y1']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
$d = ($point[0]['x1'] * $point[1]['y2'] + $point[1]['x1'] * $point[2]['y2'] + $point[2]['x1'] * $point[0]['y2'] - $point[0]['x1'] * $point[2]['y2'] - $point[1]['x1'] * $point[0]['y2'] - $point[2]['x1'] * $point[1]['y2']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
$m = ($point[0]['x1'] * $point[1]['y1'] * $point[2]['y2'] + $point[1]['x1'] * $point[2]['y1'] * $point[0]['y2'] + $point[2]['x1'] * $point[0]['y1'] * $point[1]['y2'] - $point[0]['x1'] * $point[2]['y1'] * $point[1]['y2'] - $point[1]['x1'] * $point[0]['y1'] * $point[2]['y2'] - $point[2]['x1'] * $point[1]['y1'] * $point[0]['y2']) / ($point[0]['x1'] * $point[1]['y1'] + $point[1]['x1'] * $point[2]['y1'] + $point[2]['x1'] * $point[0]['y1'] - $point[0]['x1'] * $point[2]['y1'] - $point[1]['x1'] * $point[0]['y1'] - $point[2]['x1'] * $point[1]['y1']);
view raw gistfile1.php hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿