我正在尝试为我的G15 applet绘制一个垂直滚动条,但是我很难正确定位它(如果你没有为G15 LCD屏幕做任何事情,可以把它想象成在160x43像素图像上绘图)。
这是我目前的定位代码:
perc = (float)Math.Round( range / Items.Count+1 );
y = ( perc * SelectedID+1 );
滚动条的上边缘距离顶部5px,底边距为32px。 在这种情况下,Y将是滚动条的上端,我使用的是2个像素的长度;我确实尝试了一个可变长度的条形图,它和上面的代码一样。 SelectionID基于0。
我需要的只是计算出位置的数学,不需要用于绘制它的代码。
感谢。
答案 0 :(得分:6)
所以你只是在简单的线性插值之后,对吧?
正如c
范围内的值a..b
一样,您需要x..y
范围内的结果值,具体取决于a
和{{b
之间的线性位置1}}?
这种情况的等式是(假设有问题的数字是浮点数或双数):
// 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索引,则可以省略a
和x
来获取
pos = c/b
result = pos * y
如果您使用的任何数字都是整数类型,则需要在分割之前将它们转换为双精度数或浮点数(或任何实数类型)。
如果你不能将任何东西投射到双打,你可以将所有方程组合在一起,但是:
result = (c * y) / b
这将保证c
和y
在整数除法发生之前相乘,这将减少与整数除法相关的误差。