2013-09-26 3 views
1

Я работаю над проектом, в котором мне нужно вращать шину на основе значения от датчика положения. Датчик обеспечивает значения от 261 (при -90 градусов) до 395 (при +90 градусов). Я использую TransformGroup, так что почти при значении 327 от датчика шина должна быть прямой и прямой enter image description here.Точный расчет угла

Когда значение составляет 395, тогда шина будет полностью лежать вдоль оси X, аналогично случаю для значения 261. Я могу переместить шину, но я не могу вычислить точный угол.
Мой способ вычисления подобен тому, что я вычисляю количество значений между значением по умолчанию или нулевым значением (327) для определенного угла (скажем, 3). поэтому я получаю количество значений для этого угла. Затем я делю это число на угол (3 градуса). Поэтому я получаю угол для одного значения.

float tempangle = value from sensor-zero value which is 327; 
       tempangle = Math.Abs(tempangle); 
       tempangle /= float.Parse(angle for reference say 3 degree); 
       tempangle = 1/tempangle; 

Здесь я поставил некоторый корпус известного угла под сенсором (который имеет степень степени). Когда я хочу найти некоторый угол для некоторого значения, я просто умножаю этот угол на число значений между этим значением и значением по умолчанию (327). Поэтому я получаю угол поворота тела.
предположит, я получил угол после расчета

angle for one sensor value =1.14286286 

Пусть я вычислить угол вычислителем как

1.14286286 *2=2.2857 
1.14286286 *3=3.42858 
1.14286286 *4=4.57145 
1.14286286 *5=5.714314 
1.14286286 *6=6.85717 

Как вы можете видеть, что угол пропускают несколько десятичных значений. Есть ли способ сотрудничать с ним? благодаря

+0

Использование 'double' вместо' float'. – Clemens

+0

Я имею в виду одно значение 2.2857, а второе значение - 3.42858, если возможно, что я мог бы получить значение, равное 2,5 после 2.2, он не должен перейти на 3 сразу после 2.2. Мой метод не может рассчитывать между значениями. –

ответ

0

Не знаю, если я понимаю вашу проблему, но метод, который calcaluates угол между -90 и 90 градусов от входного значения в диапазоне 261 до 395 будет просто выглядеть следующим образом:

private static double SensorValueToAngle(double value) 
{ 
    const double sensorMin = 261; 
    const double sensorMax = 395; 
    const double angleMin = -90; 
    const double angleMax = 90; 

    return angleMin + (angleMax - angleMin) 
     * (value - sensorMin)/(sensorMax - sensorMin); 
} 
+0

Делает ли (angleMax - angleMin) умножение на числитель или знаменатель? –

Смежные вопросы