この'回転'は原点周りであり,拡大縮小も原点からズレも含むものである事も学んだ.
このため積の順序が問題になることも学んだ.
さておいらの場合,これまでよくやりたい事として出てくるもので図形の中心で回転っていうのがある.
やり方は回転中心としたい座標分負の並進をして原点まで移動させて,回転.
その後また同じ分並進させて元の位置に戻す.
で,これを計算しておこうと思う(どんな式になるか調べた事もなかったので).
回転角度が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 件のコメント:
コメントを投稿