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)は

以下のリンクからダウンロードできます

NL-BASIC(N88-BASIC互換?)ホームページ

Readme.txtを読んで遊んで下さい



このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)