緩やかなカーブを表現する
今、座標(pos)と移動量(mov)を持った物体OBJがあります。
座標はx,y、移動量はspeed,theta(速度,角度)を持っています。
ここで、目的地GOAL(x,yを持つ)があり、OBJはそこに向かって移動します。
OBJがGOAL付近に到着すると、OBJはランダムな座標に設定されます。
ここで、私は飛行機や車のような緩やかなカーブを表現したいと思いました。そこで、
OBJの速度は一定で、目的地についたときに、OBJとその目的地までの角度を
変数OLDthetaに保存しておき、OLDthetaから新たな目的地までの角度(OBJ.mov.theta)を引き、
それが0でなければ、OLDthetaに0.05を加減させます。そうすると、
結果的にOLD.thetaはOBJ.mov.thetaと等しくなり、緩やかなカーブも表現できると思いました。
しかし、プログラムを実行すると、緩やかなカーブはするのですが、
遠回りなカーブをしたり、放って置くといきなり不規則な移動を起こして
まったく関係のないところへ行ってしまいます。
どこらへんの考えが誤っているでしょうか?どなたか回答をお願いします。
ちなみに、移動量は
OBJ.pos.x += cos(OLDtheta)*OBJ.mov.speed
OBJ.pos.y += sin(OLDtheta)*OBJ.mov.speed
で設定しています。
一応、関係のありそうな箇所のコードを書いておきます。
(角度を求めるコード)
OBJ.mov.theta = atan2 (GOAL.y - OBJ.pos.y , GOAL.x - OBJ.pos.x);
if(OLDtheta - OBJ.mov.theta != 0){
______if(OLDtheta>OBJ.mov.theta){
____________OLDtheta -= 0.05;
______}else{
____________OLDtheta += 0.05;
______}
}
(構造体)
struct VEC{
______float x,y;
};
struct VEC2{
______float speed; //スピード
______float theta; //角度
};
struct CharaData{
______VEC pos; //座標
______VEC2 mov; //移動量
};