座標変換マトリクス(AutoLISP)
座標変換の行列
nentsel や nentselp, grvecs などでは変換マトリックスを使って座標値の行列ベクトル計算(いわゆるアフィン変換、アフィン写像)をしたりする。
アフィン変換については、説明が面倒なのでwiki を見てもらうとして、要はオブジェクトを移動したり、回転したり、変形したりするときに座標を変換する目的で使う。
座標系の変換は、trans関数を使えばいいので、わざわざ座標変換マトリクスで計算する必要はない。
座標変換リストの例
(defun mat:move ( veclst / ) ; 単純な移動
(list
(list 1.0 0 0 (car veclst) )
(list 0 1.0 0 (cadr veclst) )
(list 0 0 1.0 (caddr veclst))
(list 0 0 0 1.0 )
)
)
(defun mat:z-axis-rotate (ang / ) ; Z軸で回転
(list
(list (cos ang) (- (sin ang)) 0 0 )
(list (sin ang) (cos ang) 0 0 )
(list 0 0 1.0 0 )
(list 0 0 0 1.0)
)
)
(defun mat:x-scale (factor / ) ; X方向に尺度変更
(list
(list fact 0 0 0 )
(list 0 1.0 0 0 )
(list 0 0 1.0 0 )
(list 0 0 0 1.0)
)
)
(defun mat:y-scale (factor / ) ; XY方向に尺度変更
(list
(list fact 0 0 0 )
(list 0 fact 0 0 )
(list 0 0 1.0 0 )
(list 0 0 0 1.0)
)
)
複数の移動や拡大縮小、回転などで複数内容を一度で行う変換マトリクスを作成する場合は、リストの合成が必要になるので、行列の計算を理解しないといけない。(数学が役に立つよ!)
関連記事
