アストラルプリズム

PC、スマホ、ゲームなどの備忘録と日記

Blender python マトリックスワールドとは

座標軸を表すマトリックスワールドを理解しとけば三角関数やら複雑な式を使わなくてもメッシュの移動や変形が楽になるハズ。

定義
マトリックスワールドとはある座標軸の傾きと原点からの距離を表したもの

解説
図のように任意の座標軸をエンプティとすると分かり易い。
このエンプティのx軸、y軸、z軸の長さをxyz座標に分解した物と根本の座標(原点からの位置)を使う。
f:id:katsumi3:20200112180741p:plain
f:id:katsumi3:20200112190640p:plain



例題1
原点にある座標軸の矢印の先端の座標は
x→(1,0,0)
y→(0,1,0)
z→(0,0,1)
でそれぞれ原点からの距離はゼロなので
Matrix_worldは
Matrix((
(1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(0.0, 0.0, 1.0, 0.0),
(0.0, 0.0, 0.0, 1.0)))
となる。

f:id:katsumi3:20200112163001p:plain

例題2
任意の位置にある座標軸のx、y、z軸の先端の座標は
x→(0.94473,1.0643,1.0887)
y→(-0.22649,1.8424,1.2399)
z→(-0.26589,0.45016,1.4852)

根元の座標は
(0.01699,1.0252,0.71753)

x、y、zから根元の座標を引く
(python上だと小数点以下の計算は小さい誤差がついてこんなきれいな値にならない)
x→(0.94473-0.01699,1.0643-1.0252,1.0887-0.71753)
=(0.92774, 0.0391, 0.37117)
y→(-0.22649-0.01699,1.8424-1.0252,1.2399-0.71753)
=(-0.24348, 0.8172, 0.52237)
z→(-0.26589-0.01699,0.45016-1.0252,1.4852-0.71753)
=(-0.28288, -0.57504, 0.76767)

>>> obj.matrix_world
Matrix((
(0.92774, -0.24348, -0.28288, 0.01699),
(0.0391, 0.8172, -0.57504, 1.0252),
   (0.37117, 0.52237, 0.76767, 0.71753),
(0.0, 0.0, 0.0, 1.0)))

f:id:katsumi3:20200112181609p:plain