私は円形の反発の処理で少しデモを持っています。 オブジェクトと反発体(マウス) の角度が360に近い場合を除いて、 0のゾーン(またはPI | -PI)。0と360度の端(またはラジアン-PIとPI)
やYouTube video
それがために、この移行の100%ですが、私はそれを克服するためにどのように任意のアイデアを持っていません。すでにモジュロで演奏しています。
私は円形の反発の処理で少しデモを持っています。 オブジェクトと反発体(マウス) の角度が360に近い場合を除いて、 0のゾーン(またはPI | -PI)。0と360度の端(またはラジアン-PIとPI)
やYouTube video
それがために、この移行の100%ですが、私はそれを克服するためにどのように任意のアイデアを持っていません。すでにモジュロで演奏しています。
を行く - 私はあなたが比較でラジアンと度を混在させないことを願っています。
あなたの計算
1つの角度が359
あると、別のは、たとえば、
1
ある場合
float angleDist = abs(angle - repulsor.angle);
and later comparison with
inc=45 degrees
が間違って動作します。
あなたは、いくつかの場合、条件を構築したり、式を使用することができます。
angleDist = arrcos(cos(angle - repulsor.angle));
ありがとう、これは動作します! – VVK
これは、オブジェクトの内部処理/ 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);
}
正しくすべてのケースを扱うという問題があるコードは何ですか? – harold
これは役に立ちます:https://stackoverflow.com/questions/1878907/the-smallest-difference-between-2-angles –