Я пытаюсь построить средневзвешенное значение из данных датчиков, которые я получаю с помощью SensorManager. Моя проблема в том, что азимут, тангаж и крен имеют максимальное значение, и когда я нахожусь именно в этой точке, значения меняются от 0 до 359 или наоборот. Мое среднее значение на данный момент представляет собой просто сложение всех значений и одно деление на количество значений.
Допустим, я получаю значения: 1, 359, 350, 10. В этом случае я хочу, чтобы среднее значение равнялось 0. Как мне изменить уравнение, чтобы получить эту функциональность?
Должен ли я проверять «ближайшее» расстояние до 0/360 и использовать это значение вместо реального значения?
Это также создаст некоторые проблемы, если у меня будут значения около 180:
160, 200 -> среднее значение должно быть 180, но с моей идеей ближайшего расстояния это будет 160, потому что 200 + 160 = 360.
Как я могу это решить?
Изменить: это значения, которые я получаю от 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
azimuth
и посмотреть, являются ли они целым числом, кратным 360. Если это так, то вы можете оставить значение равным 0, как вы хотели. Я вижу в этом один из паттернов, которым вы можете воспользоваться. - person Shobhit Puri   schedule 01.06.2013