2013-09-26 127 views
1

我正在研究一個項目,在該項目中,我必須根據位置傳感器的值旋轉輪胎。傳感器提供的數值從261(-90度)到395(+90度)。我正在使用TransformGroup,所以差不多在傳感器的327值處輪胎應該筆直並豎立enter image description here精確角度計算

當值爲395時,輪胎將完全沿X軸放置,類似於值爲261的情況。我可以移動輪胎,但我無法計算精確的角度。
我的計算方法就像我計算特定角度(比如說3)的默認值或零值(327)的值的數量。所以我得到這個角度的數值。然後我把這個數字從角度(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.2之後得到2.5的值,那麼在2.2之後它不應該跳到3。我的方法無法在兩個值之間進行計算。 –

回答

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)是否與分子或分母相乘? –