2017年4月24日月曜日

SLRRモーターコア 計算方法のお話 メモ

三角関数の話です

うろ覚えなのでソース確認しないとだな

・二等辺三角形と三角関数を利用したRの決定

・レールにカントがついている場合のrot決定

・KFMでそれらを記述する方法

・二等辺三角形と三角関数を利用したRの決定

扇形軌道の視点と終点の接線の角度と直線での二点間距離で
二等辺三角形を作図するです

ベジェとか出やったほうがきれいに出るけどめんどくさいでしょあれ
なので先にRとθだけで作図出来る方法をやるです


まず現在の向きと位置をpos1,rot1として
ターゲットとなるガイドオブジェクトの位置をpos2,rot2とします

んでrot1とrot2に<1,0,0>を掛けて導き出した方向ベクトルをvec1,vec2

方向ベクトルから導き出した平面上での方角をdir1 dir2とします

dir1 = llAtan2(vec1.y,vec1.x);
dir2 = llAtan2(vec2.y,vec2.x);

んでこっからRを算出しますが
これはpos1,pos2間の距離とdirの角度の差を利用します

確か X=Rsinθ辺りの式を変形するとRを出せる式になるです

なので まずXを決定します

Xはpos1とpos2の中点座標までの距離で出てくるので

そっからX= llVecMag(pos2-pos1)/2とかだったかな
θ = (dir2-dir1)/2 だったっけかなぁ

これでパラメータ全部埋まったのでXとθからRが出ます
んでRが出たらそっから移動速度とフレーム数で円周上の距離を割ると

移動モーションで扇形軌道を描く線を通すための
Rとθが決定するので

あとは頑張って座標プロットしてモーション組んでください


・レールにカントがついている場合のrot決定

割と単純な座標計算です

<0,0,1>のベクトルをrot掛けてvec1_1出してな
これの前に出したdirの式使って正規化する

vec1_1=vec1_1/llEuler2Rot(<0,0,dir>);

これで正規化した”傾き”のvectorが出るからな

そしたら kant = llAtan2(vec1_1.z,vec1_1.y);

これでいけっかなぁ

まぁ航空機でのピッチロールヨーを出す数式と基本的に一緒

航空機と違うのは表示機ではなく実際の移動に使う部分だな


・KFMでそれらを記述する方法

とりあえず円は多角形で近似出来るだろー

フレーム最小のθとR使ってフレーム間距離出してな~
そしたら曲がる角度と移動距離が決定されるので

あとはそれをKFMに記述するだけでOK


大体この辺でいけるはずだ

んでこの理論で組んだモーターコアつくって
移動速度の外部コマンドでコントロール出来るブラックボックスにすれば
ツアーライドとかあのへんに汎用的に使えるんじゃねーの的な

以上

0 件のコメント:

コメントを投稿