Ric*_*ral 4 math performance animation function
我试图通过手动更改窗体的不透明度来为我的窗体添加淡入淡出效果但是我在计算正确的值以通过窗体的不透明度值增加时遇到一些麻烦.
我知道我可以使用AnimateWindow API,但它显示了一些意想不到的行为,我宁愿手动操作,以避免任何p/invoke,所以我可以稍后在Mono中使用它.
我的应用程序支持从1到10的速度.我手动计算速度为1(最慢)我应该增加不透明度0.005和速度10(最快)我应该增加0.1.至于1到10之间的速度,我使用以下表达式来计算正确的值:
double opSpeed = (((0.1 - 0.005) * (10 - X)) / (1 - 10)) + 0.1; // X = [1, 10]
Run Code Online (Sandbox Code Playgroud)
我虽然这可以给我一个线性值,那就没关系.但是,对于等于4及以上的X,它已经太快了.比它应该更多.我的意思是,速度在7到10之间,我几乎看不出差异,这些值的动画速度应该稍微间隔一点
请注意,我仍然希望最快增量为0.1,最慢增量为0.005.但我需要所有其他人在他们之间保持线性关系.
我做错了什么?
编辑:它实际上是有道理的,为什么它这样工作,例如,对于增量之间的固定间隔,比如几毫秒,并且使用上面的等式,如果X = 10,则opSpeed = 0.1并且如果X = 5,则opSpeed = 0.47.如果我们考虑这个,值为0.1将循环10次,值为0.47将循环为双倍.对于只有几毫秒的这么小的间隔,这些值之间的差异并不大到将速度从5分到10分.
我想你想要的是:
0.005 + ((0.1-0.005)/9)*(X-1)
Run Code Online (Sandbox Code Playgroud)
X的范围从1-10
当X = 1时,这给出对应于0.005的线性标度,当X = 10时给出对应于0.1的线性标度
在下面的评论之后,我还包括我的答案适合几何系列而不是线性比例.
0.005 * (20^((X-1)/9)))
Run Code Online (Sandbox Code Playgroud)
当X = 1时,产生对应于0.005的几何变化,当X = 10时,得到0.1
经过更多讨论后,如下面的评论所示,更新如下.
@Nazgulled在我的几何系列和他实际需要的手动值之间找到了以下关系,以确保平滑的淡入淡出动画.
关系如下: 我♥图!:) http://i41.tinypic.com/9v8lqg.jpg
这意味着几何/指数系列是要走的路.
经过几个小时的努力,想出适当的曲线拟合右侧图并得到一个合适的方程,@ Nazgulled告诉我,Wolfram | Alpha就是这么做的.真是太神奇了.:)
他应该拥有他现在想要的东西,除非上面的等式有很高的误差.
| 归档时间: |
|
| 查看次数: |
2922 次 |
| 最近记录: |