2013-08-04 42 views
2

我正在嘗試編寫一個應用程序內部操縱桿軸校準工具。算法來校準遊戲杆

操縱桿軸區域應該是一個矩形,但實際上它是一條非線性閉合曲線,我想提高精度。

校準應該以這種方式工作: 我們有一個測量值,而這樣一來,我們得到正確的值:

Correct value = [(measured value)/range] * wantedrange 

,其中範圍是最大的,併爲軸線測量的最低值之間的差異。 但是還有一個偏移量將中心點移動到正確位置,如何計算它?

編輯:我還做了一個圖像:綠色矩形是預期的區域,紅色形狀是「真正的」不準確的測量面積,終於藍色的是,我轉移到(0,0)的希望校準區域,使得我可以使用該比率將座標轉換爲更大的綠色矩形。

enter image description here

EDIT2: 此圖片說明校準如何更加準確,這要歸功於zapl答案: 如果我們發現藍色矩形中心,我們可以在4個矩形分割矩形和計算該範圍與綠色矩形範圍之間的比率。 和代碼應該是這樣的:

if(value<axiscenter) correctedvalue = ((value-axismin)/(axiscenter-axismin)) * wantedaxisrange; 
else correctedvalue = wantedaxisrange + ((value-offset-axiscenter)/(axismax-axiscenter-axismin)) * wantedaxisrange; 

enter image description here

回答

1

您可以通過指導用戶獲得藍色矩形的位置,讓你看到的值是沿着邊緣移動操縱桿紅色曲線。您還應該指示用戶將遊戲杆留在中心位置,因爲您通常需要了解該中心。經過調整的中心並不總是真正的中心位置。

對於每個軸,將這些值與它們所在中心的側邊分開,並找出最接近中心點的那些值。這將與計算中心一起工作。現在你有藍色的矩形。

E.g.在X軸上,您可以看到範圍從0-20和80-100的值,中心是〜50>藍色矩形的範圍是20 - 80.

假設您要校準值以使其值爲0-100(綠色)校正x軸作爲

​​

值由20轉移到(將它們標準化爲0-60 -20)的右側和其範圍是60(80 - 20),其要高檔至0- 100。之後,剪輯值爲0-100,因爲它們將位於藍色矩形外部的紅線上的每個點之外。

結果看起來像this

粉紅色的是改造後的值,和綠色矩形之外的粉色區域被切掉。

關於中心點:通過這些計算也是如此。

+0

嗨,我接受答案,因爲我意識到如何正確計算棒的中心。檢查我的編輯是否正常請不要:) – Vektor88

+1

@ Vektor88應該工作,我想你得到的觀點是一樣的,如果你將藍色中心扔在變換公式中,因爲該變換將任何點以藍色映射到點以綠色。 – zapl

+1

以上更廣義的版本將使用[2D變換矩陣](http://www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm) - 允許進行更多調整(剪切,旋轉, ..),因爲它同時查看兩個軸,而不是獨立處理它們。 – zapl