>垂直なベクトルは(0,1,0)に速度の係数を掛けたものです。これを3軸で回転変換するだけですよ。
あー、自分はどうやら、難しく考えていたみたいです><
何度か読み直して、考えてみたらできました!
以下、完成したコードです。
関数は
http://www015.upp.so-net.ne.jp/notgeld/quaternion.html
からそのまま使いました。
pppが、完成する揚力ベクトルを持つクォータニオンです。
(rrrとqqqが使い捨てのクォータニオンです。)
vAngle が仰角
hAngle がxz座標上の回転角度
rotAngle がロール角
です。
ppp = PutXYZToQuaternion(0, 1, 0);
//回転軸を、機体のxz座標の角度+90度に指定して、そこから仰角分だけ回転する時に利用するクォータニオンを生成。
qqq = MakeRotationalQuaternion(vAngle, sin(hAngle+PHI_F/2), 0, cos(hAngle+PHI_F/2));
rrr = MakeRotationalQuaternion(-vAngle, sin(hAngle+PHI_F/2), 0, cos(hAngle+PHI_F/2));
//仰角分、回転。
ppp = Kakezan(rrr, ppp);
ppp = Kakezan(ppp, qqq);
//回転軸を機体の進行方向に指定し、ロール各だけ回転時に利用するクォータニオンを生成。
qqq = MakeRotationalQuaternion(rotAngle, sin(hAngle), sin(vAngle), cos(hAngle));
rrr = MakeRotationalQuaternion(-rotAngle, sin(hAngle), sin(vAngle), cos(hAngle));
//ロール分、回転。
ppp = Kakezan(rrr, ppp);
ppp = Kakezan(ppp, qqq);
//揚力のベクトルを表示。
DrawLine3D(VGet(0,0,0),VScale(VGet(ppp.x,ppp.y,ppp.z),10000),GetColor(255,255,255));
//機体のベクトルを表示。
DrawLine3D(VGet(0,0,0),VScale(VGet(sin(hAngle),sin(vAngle),cos(hAngle)),10000),GetColor(255,0,255));
ご協力ありがとうございました!無事解決です。
これから、機体への影響への実装に向かっていきます。