计算滚动条位置

Mea*_*ter 2 c# math

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

这是我目前的定位代码:

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

y = ( perc * SelectedID+1 );
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Wel*_*bog 7

所以你只需要简单的线性插值,对吧?

因为你有一个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
Run Code Online (Sandbox Code Playgroud)

现在,如果所有内容都是0索引,则可以省略ax获取

pos = c/b
result = pos * y
Run Code Online (Sandbox Code Playgroud)

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

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

result = (c * y) / b
Run Code Online (Sandbox Code Playgroud)

这将保证cy乘以整数除法发生之前一起,这将减少与整数除法相关的错误.