興味があろうがなかろうが。

なるべく役に立つ、とがった内容を記していきたいと思います。

【FreeCADプログラミング】行列(マトリックス)の回転移動

本日のお題は『行列の回転移動』です。

平行移動の時よりもさらにとっつきにくいですが、後でかなり役に立つため、頑張って一緒に学習していきましょう。

1. 環境

  • FreeCAD 0.18

2. 行列の回転移動とは?

行列の回転移動とは何か、少々おさらいします。

行列の回転移動というのは、簡単に言えば、座標系をある軸を元に回転させることを言います。

3次元だと書きにくいので、2次元的に表現します。

例えば、以下のようにXY軸があったとして、Z軸を回転させます。

「なんだこんなもんか」と思うかもしれませんが、立派な回転移動です。

f:id:appli-get:20200918105148j:plain

回転移動のイメージ

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プログラミングのトップページに飛びます。

よろしければご参照くださいませ。

www.interested-or-not.com