N88-BASICで行列(matrix) (2回目)
2021/6/24(木) N88-BASICで 行列 (matrix) (2 回 目 ) (by ULproject for N88-BASIC, NL-BASIC) 今回は、前回の併進移動に回転移動を追加します (キー操作はプログラムの最終行コメント参照) 前回同様、行列は大文字、ベクトルとスカラーは 小文字で、行列は 4×4(4行4列)とし、ベクトルは 3次元(4次元目は常に1)とします またベクトル上部の矢印は省いています まず、位置ベクトル p=(x,y,z)を単位ベクトル n=(n 1 ,n 2 ,n 3 )まわりにθ度回転した 点 p'=(x',y',z')を求める式は 図 1 位置ベクトルの回転 |p'- q|=|p - q|, |a| = |p - q|cosθ a = |a|(p - q)/|p - q| = (p - q)cosθ = pcosθ - qcosθ |n×p|はnとpでできる平行四辺形の 面積なので底辺 |n|=1と高さ|p - q|の積 |n×p| = |n||p - q| = |p - q|より、 b = |p - q|sinθ(n×p)/|n×p| = (n×p)sinθ q = (n・p)n p'= q + a + b = q+pcosθ-qcosθ+(n×p)sinθ = pcosθ+(1-cosθ)q+(n×p)sinθ p'= pcosθ+(1-cosθ)(n・p)n+(n×p)sinθ を、 p' =Rpの形に変形していきます 外積 a×bと内積a・bの成分表記について、 x,y,z軸方向の単位ベクトルをi,j,k、 a=(x,y,z),b=(x',y',z')とすると、 i×i = j×j = k×k = 0ベクトル i×j = k , j×k = i , k×i = j j×i = -k , k×j = -i , i×k = -j より a×b = (ix + jy + kz)×(ix'+ jy'+ kz') = kxy'-jxz'-kyx'+iyz'+jzx'-izy' = (yz'