2

合同係数 x=y(mod 360) である変数があります。これは、y が 0 から 360 まで変化し、値が 360 より大きい場合は再び 0 になることを意味します。たとえば、y = 365 の場合は x=5 です。

y を安定させるためにこの関数を書いたので、x と previousx の差が 5 より大きい場合は x を取得し、それ以外の場合は previousx を取得します。

float stabilize(float x,float previous){

    if(fabs(x-previousx)<5)
    {
        return previousx;
    }
    else
    {
        return x;
    }

}

これは 0 から 360 の間で問題なく動作しますが、これは 360 と 0 の境界条件で失敗します。y が 0.3 などの 0 に近い値で、前の y が 359 などの 360 に近い値である場合、どのように値を安定させることができますか?は 359 - .3 = 358.7 です。しかし、私はそれが 1.3 であるモジュロ360差であることを望みます。

4

2 に答える 2

4

のようなものはif(fabs(x-previousx)<5 || fabs(x-previousx)>355)どうですか?入力データが mod 360 であるとすると、差が十分に大きい場合は、両方の値が境界に十分近いことを意味します。

于 2012-08-03T09:57:40.343 に答える
1

元の数値を差し引いて、ファブ (結果) のモジュロ 360 を取得できます。

例えば:

359 - 720.3 = -361.3
fabs(-361.3) = 361.3
361.3 % 360 = 1.3
于 2012-08-03T09:57:04.503 に答える