本日のお題は『行列の回転移動』です。
平行移動の時よりもさらにとっつきにくいですが、後でかなり役に立つため、頑張って一緒に学習していきましょう。
1. 環境
- FreeCAD 0.18
2. 行列の回転移動とは?
行列の回転移動とは何か、少々おさらいします。
行列の回転移動というのは、簡単に言えば、座標系をある軸を元に回転させることを言います。
3次元だと書きにくいので、2次元的に表現します。
例えば、以下のようにXY軸があったとして、Z軸を回転させます。
「なんだこんなもんか」と思うかもしれませんが、立派な回転移動です。
3. どういうときに使う?
平行移動ほどではありませんが、やはり回転移動のみを使って何かをすることは、あまりないです。
平行移動の時と同様、元の座標系と、この回転移動した座標系を組み合わせることで得られる、相対位置の計算に使用することが多いです。
(個人的な意見ですよ。)
4. プログラムを書いてみよう
回転移動にはMatrixクラスのrotateX, rotateY, rotateZメソッドを使用します。
今回は、絶対座標系のマトリックスに対して、Z軸を起点に90°回転させたマトリックスを取得します。
# -*- coding: utf-8 -*- #import ptvsd #print("Waiting for debugger attach") # 5678 is the default attach port in the VS Code debug configurations #ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True) #ptvsd.wait_for_attach() ################ # 座標系の回転 ################ import FreeCAD import math # 1.絶対座標系のXYZを取得 baseMtx = FreeCAD.Matrix() FreeCAD.Console.PrintMessage("based" + str(baseMtx) + "\n") # 2.絶対座標系からZ軸を起点に、90°回転する baseMtx.rotateZ(math.pi / 2) FreeCAD.Console.PrintMessage("based" + str(baseMtx) + "\n")
basedMatrix ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1)) basedMatrix ((6.12323e-17,-1,0,0),(1,6.12323e-17,0,0),(0,0,1,0),(0,0,0,1))
回転のプラス方向は時計回りになりますので、X軸は-Y方向となり、Y軸は+X方向となります。相当微小な結果が入っていますが、ナノどころじゃないレベルの誤差なので、ほぼ0と考えてよいでしょう。
5. まとめ
- 回転移動をするには、MatrixクラスのrotateX, rotateY, rotateZメソッドを使用する
- 平行移動と同じく、回転移動だけを使用するケースは割と少ない
6. 最後に
今回はマトリックスを回転しただけで、あまり面白みは無かったかもしれません。
次回はもう少し実用的なプログラムを書いていきますので、少々お待ちください。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。