rotate() や translate() で座標を変換することは行列の計算で行われている。 2次元の場合、 座標変換後の座標(x,y)と画面上の座標(u,v)の間には
(u,v,1)' = M * (x,y,1)'
という関係がある。ここで、'は行列の転置を表す。 この行列を取得するには、
PMatrix2D mat = (PMatrix2D)getMatrix();
を用いる。
mat={m00 m01 m02} {m10 m11 m12} { 0 0 1 }
の形である。これらの要素を取り出すには、mat.m00, mat.m01などとする。
角度tの回転は
mat={cos(t) -sin(t) 0} {sin(t) cos(t) 0} { 0 0 1}
であり、原点の(a,b)への移動は
mat={1 0 a} {0 1 b} {0 0 1}
である。M1, M2に対応する変換を順次施した結果はM1*M2となる。
3次元の場合は、
(u,v,w,1)' = M * (x,y,z,1)'
この行列を取得するには、
PMatrix3D mat = (PMatrix3D)getMatrix();
行列は
mat={m00 m01 m02 m03} {m10 m11 m12 m13} {m20 m21 m22 m23} { 0 0 0 1 }
となる。