2017-07-28 9 views
0

私は円形の反発の処理で少しデモを持っています。 オブジェクトと反発体(マウス) の角度が360に近い場合を除いて、 0のゾーン(またはPI | -PI)。0と360度の端(またはラジアン-PIとPI)

やYouTube video

それがために、この移行の100%ですが、私はそれを克服するためにどのように任意のアイデアを持っていません。すでにモジュロで演奏しています。

+0

正しくすべてのケースを扱うという問題があるコードは何ですか? – harold

+0

これは役に立ちます:https://stackoverflow.com/questions/1878907/the-smallest-difference-between-2-angles –

答えて

1

を行く - 私はあなたが比較でラジアンと度を混在させないことを願っています。

あなたの計算

1つの角度が 359あると、別のは、たとえば、 1ある場合
float angleDist = abs(angle - repulsor.angle); 
    and later comparison with 
inc=45 degrees 

が間違って動作します。

あなたは、いくつかの場合、条件を構築したり、式を使用することができます。

angleDist = arrcos(cos(angle - repulsor.angle)); 

+0

ありがとう、これは動作します! – VVK

0

これは、オブジェクトの内部処理/ JAVAだ、最初は周りの0.0、0.0中央

 float repulsorAngle = atan2(repulsor.y, repulsor.x); 
     if(rad < 0.0) { angle = map(rad, -PI, 0, 180, 360); } 
     else { angle = map(rad, 0, PI, 0, 180); } 

     float angleDist = abs(angle - repulsor.angle); 
     float dist = PVector.dist(new PVector(x, y), new PVector(repulsor.x, repulsor.y)); 

     float inc = 45.0; 

     if (angleDist < inc) { 
     float sine = sin(map(angleDist, inc, 0, 0, PI/2)) * 50.0; 

     println(sine); 

     x = cos(radians(angle)) * (r + sine * dir); 
     y = sin(radians(angle)) * (r + sine * dir); 

     } else { 

     x = cos(radians(angle)) * (r); 
     y = sin(radians(angle)) * (r); 

     } 
関連する問題