2010年4月6日火曜日

メモ: その場で回転♪

フィン変換が'並進','回転','拡大縮小',個々の行列の積で表せることは昔学んだ.
この'回転'は原点周りであり,拡大縮小も原点からズレも含むものである事も学んだ.
このため積の順序が問題になることも学んだ.

ておいらの場合,これまでよくやりたい事として出てくるもので図形の中心で回転っていうのがある.
やり方は回転中心としたい座標分負の並進をして原点まで移動させて,回転.
その後また同じ分並進させて元の位置に戻す.

,これを計算しておこうと思う(どんな式になるか調べた事もなかったので).
回転角度がt,回転中心にしたい点(例えば図形の中心)が(tX, tY).

いうことで計算してみる.
Maximaさん(のMacバイナリさん)にお願い

(%i1) O:matrix([cos(t), -sin(t), 0],[sin(t), cos(t), 0], [0,0,1]);
[ cos(t) - sin(t) 0 ]
[ ]
(%o1) [ sin(t) cos(t) 0 ]
[ ]
[ 0 0 1 ]
(%i2) A:matrix([1, 0, tX],[0, 1, tY], [0,0,1]);
[ 1 0 tX ]
[ ]
(%o2) [ 0 1 tY ]
[ ]
[ 0 0 1 ]
(%i3) B:matrix([1, 0, -tX],[0, 1, -tY], [0,0,1]);
[ 1 0 - tX ]
[ ]
(%o3) [ 0 1 - tY ]
[ ]
[ 0 0 1 ]
(%i4) A.O.B;
[ cos(t) - sin(t) sin(t) tY - cos(t) tX + tX ]
[ ]
(%o4) [ sin(t) cos(t) - cos(t) tY + tY - sin(t) tX ]
[ ]
[ 0 0 1 ]



れをSVGのtransform属性のmatrix表現で書くときは

[ m11 m12 m13]
[ m21 m22 m23]
[ 0 0 1 ]


と見立てると
transform= "matrix(m11 m21 m12 m22 m13 m23)"

となる.
m11 m12…でなくm11 m21…なんだね.)

いうメモ.

0 件のコメント: