解決済み

tetrisのテトリミノで用いられている行列の変換演算を詳しく知りたいです。(ミノは何でもいいです)

差し支えなければ回答お願いします。

補足

もともと数学Cの内容だった行列に絡んでいるので適当な数学Ⅲとして投稿しました。  複雑になってしまい申し訳ございません。

ベストアンサー

ベストアンサー

xyxy-平面上の変換を 3×33 \times 3-型の行列であらわすことにします.22-次元空間上の変換なら 2×22 \times 2-型の行列を使いそうなものですが,平行移動まで包括的に行列で表現する都合上 11 つ余分な次元をもうけます.


(1)

原点中心,角度 α\alpha だけ回転する変換:

R(α)=(cosαsinα0sinαcosα0001)R(\alpha) = \begin{pmatrix} \cos \alpha & -\sin \alpha & 0 \\ \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 1 \end{pmatrix}


(2)

xx-軸方向へ aayy-軸方向へ bb だけ平行移動する変換:

T(a,b)=(10a01b001)T(a,b) = \begin{pmatrix} 1 & 0 & a \\ 0 & 1 & b \\ 0 & 0 & 1 \end{pmatrix}

(この変換を表現するために余分な第 33 の次元が必要)


平面上の任意の合同変換は,回転変換,平行移動の合成として表現できるので,上の 22 つの変換をくみ合わせれば必要な変換はすべて実現できるはずです.


一例として,テトリミノを反時計まわりに 9090^\circ 回転する変換を実現してみます.前提として,テトリミノは 4×44 \times 4 の大きさの配列に,たとえば次のように格納されているものとします.

\begin{matrix} ■ & ■ & □ & □ \\ □ & ■ & ■ & □ \\ □ & □ & □ & □ \\ □ & □ & □ & □\end{matrix}

ただし配列のインデックスは 0,1,2,30,1,2,3 です.


問題の変換を実現するには,点 (32,32)(\tfrac{3}{2},\tfrac{3}{2}) を中心に π2\tfrac{\pi}{2} だけ回転すればよいです.そのためには

(1) (32,32)(-\tfrac{3}{2},-\tfrac{3}{2}) だけ平行移動してミノの中心を原点へ移動,

(2) 原点を中心に π2\tfrac{\pi}{2} だけ回転,

(3) (32,32)(\tfrac{3}{2},\tfrac{3}{2}) だけ平行移動して元の位置へもどす

という 33 つの変換を合成します.

T(32,32)R(π2)T(32,32)=(10320132001)(cosπ2sinπ20sinπ2cosπ20001)(10320132001)=(013100001)\begin{aligned}&T(\tfrac{3}{2},\tfrac{3}{2}) R(\tfrac{\pi}{2}) T(-\tfrac{3}{2},-\tfrac{3}{2}) \\&\quad = \begin{pmatrix} 1 & 0 & \tfrac{3}{2} \\ 0 & 1 & \tfrac{3}{2} \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \cos \tfrac{\pi}{2} & -\sin \tfrac{\pi}{2} & 0 \\ \sin \tfrac{\pi}{2} & \cos \tfrac{\pi}{2} & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 1 & 0 & -\tfrac{3}{2} \\ 0 & 1 & -\tfrac{3}{2} \\ 0 & 0 & 1 \end{pmatrix} \\&\quad = \begin{pmatrix} 0 & -1 & 3 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{aligned}

これがテトリミノを回転する変換行列です.関数の形で書くなら (x,y)(y+3, x)(x,y) \mapsto (-y + 3,\ x) という関数です.


他の変換が必要になったときもこういう要領で求められると思います.


補足

「任意の合同変換は」と書きましたが「図形の向きを変えない任意の合同変換は」の間違いです.失礼しました.

図形の向きを変える変換まで含める場合は,回転,平行移動に加えて,鏡映まで含めれば十分です.


そのほかの回答(0件)

関連する質問

もっとみる