N88-BASICでクォータニオン(quaternion) (2回目)
2021/6/27(日)
N88-BASICでクォータニオン(quaternion) (2回目)
(by ULproject for N88-BASIC,NL-BASIC)
行列(matrix)の代わりに四元数(しげんすう)
(quaternion)を使用して見ました。
今回は、四元数から行列を作り
回転移動させました
p = (x, y, z)
q = (a, b, c)
Q = (w, q) = (w, a, b, c)
p'= QpQ~
p'= (w2-q・q)p+2(q・p)q+2w(q×p)
(w2-q・q)p
|w2-a2-b2-c2 0 0||x|
=|0 w2-a2-b2-c2 0||y|
|0 0 w2-a2-b2-c2||z|
(q・p)q
=(ax+by+cz)q
=(a2x+aby+acz,bax+b2y+bcz,cax+cby+c2z)
|a2 ab ca||x|
=|ab b2 bc||y|
|ca bc c2||z|
(q×p)
=(bz-cy, cx-az, ay-bx)
=(bz,cx,ay)-(cy,az,bx)
| 0 -c b||x|
=| c 0 -a||y|
|-b a 0||z|
w2+a2+b2+c2 = 1よりw2 = 1-a2-b2-c2
p'= QpQ~ = (w2-q・q)p+2(q・p)q+2w(q×p)
|w2-a2-b2-c2+2a2 2(ab-wc) 2(ca+wb)||x|
=|2(ab+wc) w2-a2-b2-c2+2b2 2(bc-wa)||y|
|2(ca-wb) 2(bc+wa) w2-a2-b2-c2-2c2||z|
|1-2(b2+c2) 2(ab-wc) 2(ca+wb)||x|
=| 2(ab+wc) 1-2(c2+a2) 2(bc-wa)||y|
| 2(ca-wb) 2(bc+wa) 1-2(a2+b2)||z|
並進移動T=(0,tx,ty,tz)を入れると
p'= QpQ~ + T
|1-2(b2+c2) 2(ab-wc) 2(ca+wb) tx||x|
=| 2(ab+wc) 1-2(c2+a2) 2(bc-wa) ty||y|
| 2(ca-wb) 2(bc+wa) 1-2(a2+b2) tz||z|
| 0 0 0 1 ||1|
となります
NL-BASICとblg~.zip(quat002.bas)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい