2009-09-10 173 views
2

我想爲我的G15小程序繪製一個垂直滾動條,但難以正確定位(如果您沒有爲G15 LCD屏幕做過任何操作,請將其視爲在160x43像素上繪圖圖片)。計算滾動條位置

這是我的當前的定位代碼:

perc = (float)Math.Round(range/Items.Count+1); 

y = (perc * SelectedID+1); 

滾動條的上邊緣是在5像素的從頂部,底部邊緣是在32PX。在這種情況下,Y將是滾動條的上端,我使用2像素的長度;我確實嘗試了一個可變長度的欄,它和上面的代碼一樣。 SelectionID爲0。

所有我需要的是算出位置的數學,不需要繪製代碼。

謝謝。

回答

5

所以你只是簡單的線性插值之後,對吧?

如你具有範圍a..b一個值c和需要在範圍x..y一個結果值基於ab之間其直線位置?

這種情況(假設的問題是浮點或雙精度的數字)的公式:

// c is between a and b 
pos = (c-a)/(b-a) // pos is between 0 and 1 
result = pos * (y-x) + x // result is between x and y 

現在,如果一切0指數的,你可以省略ax得到

pos = c/b 
result = pos * y 

如果您使用的任何數字都是整數類型,則需要在分區之前將它們轉換爲雙精度或浮點數(或任何實數類型)。

您可將所有方程式在一起,如果你不能投什麼雙打,雖然:

result = (c * y)/b 

這將保證cy的整數除法之前相乘發生,這將減少與整數除法相關的誤差。

+0

謝謝,這讓我接近我需要的地方。我實際上需要(c * y)/(b - 1),它的行爲方式與滾動條相同。 – Measter 2009-09-10 17:40:30

+0

一個非常優雅的公式 - 作爲開發人員(不是數學專家),這是黑魔法,就像「磁鐵,它們是如何工作的?」。 – cloakedninjas 2013-07-03 16:11:34