计算滚动条位置

时间:2009-09-10 17:10:09

标签: c# math

我正在尝试为我的G15 applet绘制一个垂直滚动条,但是我很难正确定位它(如果你没有为G15 LCD屏幕做任何事情,可以把它想象成在160x43像素图像上绘图)。

这是我目前的定位代码:

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

y = ( perc * SelectedID+1 );

滚动条的上边缘距离顶部5px,底边距为32px。 在这种情况下,Y将是滚动条的上端,我使用的是2个像素的长度;我确实尝试了一个可变长度的条形图,它和上面的代码一样。 SelectionID基于0。

我需要的只是计算出位置的数学,不需要用于绘制它的代码。

感谢。

1 个答案:

答案 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索引,则可以省略ax来获取

pos = c/b
result = pos * y

如果您使用的任何数字都是整数类型,则需要在分割之前将它们转换为双精度数或浮点数(或任何实数类型)。

如果你不能将任何东西投射到双打,你可以将所有方程组合在一起,但是:

result = (c * y) / b

这将保证cy在整数除法发生之前相乘,这将减少与整数除法相关的误差。