Loading...
「ツール」は右上に移動しました。
利用したサーバー: wtserver2
1いいね 295回再生

【Unity】四元数でビー玉を回すプログラムを作ってみた

float型の配列で表現した四元数を用いて、回転軸に対する回転をプログラムしました。
矢印が示している回転軸ベクトルを軸として球体が回転します。

本来Unityでプログラムを行うのであればQuaternionを演算するライブラリを使用すれば良いのですが、今回は四元数の考え方を学習する目的で、逆数の算出や四元数同士の外積の算出処理を自身でプログラミングしました。


◆ ソースコード
github.com/S-Yajima/Play_Quaternion/blob/master/As…


◆ 考え方
θ = 回転角度
n = 回転軸単位ベクトル [n.x n.y n.z]
q = 角変位四元数 [cos(θ/2) sin(θ/2)n.x sin(θ/2)n.y sin(θ/2)n.z]
p = 位置座標四元数 [0 x y z] ※ 球の位置座標 x y z
qの逆数 = qの共役 / qの大きさ
qの共役 = [cos(θ/2) -1*(sin(θ/2)n.x sin(θ/2)n.y sin(θ/2)n.z)]
qの大きさ = sqrt(cos(θ/2)の2乗 + sin(θ/2)n.xの2乗 + sin(θ/2)n.yの2乗 + sin(θ/2)n.zの2乗)
p' = 回転後の座標を示す四元数

[ 回転後の座標p'を算出する式 ]
(式) p' = q * p * qの逆数 ※内積ではなく外積。順序不可逆であることに注意。

[ 四元数同士の外積(掛け算) ]
q1= [w x y z] と q2 = [w x y z] を外積でかける場合
[q1.w * q2.w - q1.v・q2.v q1.w * q2.v + q2.w * q1.v + q1.v * q2.v]

※ 四元数同士もベクトルと同様に内積という計算方法も別途存在するので混同に注意

◆ 参考書籍
実例で学ぶゲーム3D数学 オライリー

◆ 参考サイト
virtualcast.jp/blog/2019/11/quaternion/

◆ BGM
ラララ皿を洗おう
written by ハヤシユウ
dova-s.jp/bgm/play12595.html

#Unity #数学 #四元数

コメント