我正在尝试为我的G15小程序绘制一个垂直滚动条,但是我很难正确定位它(如果你没有为G15液晶屏做任何事情,可以把它想象成在160x43像素图像上绘图).
这是我目前的定位代码:
perc = (float)Math.Round( range / Items.Count+1 ); y = ( perc * SelectedID+1 );
滚动条的上边缘距离顶部5px,底部边缘为32px.在这种情况下,Y将是滚动条的上端,我使用的是2个像素的长度; 我确实尝试过一个可变长度的条形图,它和上面的代码一样.SelectionID基于0.
我需要的只是计算出位置的数学,不需要用于绘制它的代码.
谢谢.
所以你只需要简单的线性插值,对吧?
因为你有一个c
范围内的值,a..b
你需要在该范围内的结果值,x..y
基于其在a
和之间的线性位置b
?
这种情况的等式是(假设有问题的数字是浮点数或双数):
// 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
乘以整数除法发生之前一起,这将减少与整数除法相关的错误.