+PIから-PIラジアンまで変化するデータ値があります。
次のように、古い値から新しい値に移動するために必要な最小回転(ラジアン)を取得する必要があります。
float rotationRequired(float oldValue, float newValue){
return newValue - oldValue;
}
ただし、-179度から+179度に移動するために、時計回りに2度だけ、完全な円を回転させる必要がないため、単純に減算しても効果はありません。円周率の-PI=+ PIは、技術的に同じ回転であるためです。また、値は任意の範囲、つまり740 = 360 + 360 + 20、つまり20のみにすることができます。
私は値をsin
とcos
値に分割し、減算してからatan
:
double oldY = Math.sin(oldValue);
double oldX = Math.cos(oldValue);
double newY = Math.sin(newValue);
double newX = Math.cos(newValue);
float delta = (float) Math.atan2( (newY - oldY),(newX - oldX) );
しかし、それでも正しい結果が得られないので、誰かが別の方法を提案できますか?