0

SensorManager で取得したセンサー データから加重平均を作成しようとしています。私の問題は、ベアリング、ピッチ、ロールに最大値があり、ちょうどこの時点にいるときに、値が 0 から 359 に、または逆に入れ替わることです。私の平均は、現時点では単にすべての値を加算し、値の数で 1 除算したものです。

値を取得するとしましょう: 1, 359, 350, 10 この場合、平均を 0 にしたいのですが、この機能を得るために方程式をどのように変更する必要がありますか?

0/360 までの「最も近い」距離を確認し、実際の値の代わりにこの値を使用する必要がありますか?

値が 180 前後の場合、これも問題になります。

160, 200 -> 平均は 180 でなければなりませんが、私の最近距離のアイデアでは、200 + 160 = 360 であるため、160 になります。

どうすればこれを解決できますか?

編集: これは、SensorManager から取得した値です。

  • 0 <= 方位角 <360
  • 180<=ピッチ<=180
  • 90<=ロール<=90

Edit2: 申し訳ありませんが、加重平均を使用していることを忘れていました:

double sum = 0;
for int i = 0; i < max; i++
   sum += value[i] * (i / (triangular_number(max))
return sum
4

2 に答える 2

1

これに関するブログ記事を見つけました。

簡単に要約すると、すべての aizmuth 値の正弦の平均と aizmuth 値の余弦の平均を計算し、これらの平均値を atan2 関数に入れ、必要に応じて 2 を加算して結果を正にする必要があります。 *PI。度の値をラジアンに、またはその逆に変換することを忘れないでください。

于 2013-05-31T23:59:42.380 に答える