2010-11-28 17 views
0

逆円運動に関する問い合わせがあります。私は以下のコードを持っています。ケース1は時計回りの円運動であり、ケース2は反時計回りです。ケース1とケース2との間の切り替えは、ユーザタッチで行われる。時計回りから反時計回りに切り替えると、sin()とcos()の同じ値(timer/1.5)が使用されます。これは、私の惑星上の別の位置から反時計回りの動きを開始させます。反時計回りの動きが時計回りの動きの途中で途切れるところから開始して滑らかな遷移をするために、私のタイマーに必要な値を計算したいと思います。私の心が詰まっているので、誰かがこれについて正しい数学を知っていますか?ありがとう逆円運動

以下のコードのちょっとした説明私はロボットが惑星のx座標とy座標をとり、惑星半径+ 55の半径で円運動を実行することでロボットの位置を計算しています私のスプライトの快適な高さです)。

 case 1: 

     positionX = AttachedPlanet.positionX + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     positionY = AttachedPlanet.positionY + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     timer = timer + 0.02; 

     break; 
    case 2: 



     positionX = AttachedPlanet.positionX + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     positionY = AttachedPlanet.positionY + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     timer = timer + 0.02; 

答えて

5

なぜ同じ機能を維持し、タイマをデクリメントするだけに変えてみませんか?あなたが合計時間のいくつかの尺度を必要とする場合、常に上昇する第二のタイマを維持します。

+0

私はそれを逃したのですか?返信いただきありがとうございます!私は頭がループに詰まっていたと思う:D。私は同じ機能を使用して、追加のタイマーを追加することに決めました。乾杯。 – STDE

2

方向を切り替えるには、sin/cosの結果を減算する必要があります。だから何かのように

dir = +1; //initialization 

if (switchDirection) //event handling 
    dir *= -1; 

//calculation 
positionX = AttachedPlanet.positionX + dir*cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
positionY = AttachedPlanet.positionY + dir*sin(timer/1.5)*(AttachedPlanet.planetRadius + 55);