gpt4 book ai didi

performance - 计算淡入淡出动画不同速度的方程

转载 作者:行者123 更新时间:2023-12-03 06:14:27 24 4
gpt4 key购买 nike

我正在尝试通过手动更改表单的不透明度来向表单添加淡入淡出效果,但在计算要按表单的不透明度值递增的正确值时遇到一些问题。

我知道我可以使用 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]

我认为这可以给我一个线性值,这样就可以了。然而,对于 X 等于 4 及以上来说,它已经太快了。超过了应有的程度。我的意思是,速度在 7 和 10 之间,我几乎看不到差异,并且这些值的动画速度应该有更多的间隔

请注意,我仍然希望最快的增量为 0.1,最慢的增量为 0.005。但我需要所有其他人在它们之间保持线性。

我做错了什么?

它为什么这样工作实际上是有道理的,例如,对于增量之间的固定间隔,比如说几毫秒,根据上面的等式,如果 X = 10,则 opSpeed = 0.1,如果 X = 5,则操作速度 = 0.47。如果我们考虑一下这一点,值 0.1 将循环 10 次,而值 0.47 将仅循环 double 次。对于如此小的几毫秒间隔,这些值之间的差异并不大,无法区分 5 到 10 的速度。

最佳答案

我认为你想要的是:

0.005 + ((0.1-0.005)/9)*(X-1)

X 的范围为 1-10

当 X = 1 时,这给出了对应于 0.005 的线性标度;当 X = 10 时,这给出了对应于 0.1 的线性标度

在下面的评论之后,我还添加了适合几何级数而不是线性比例的答案。

0.005 * (20^((X-1)/9)))

当 X = 1 时,几何变化相当于 0.005;当 X = 10 时,几何变化相当于 0.1

经过更多讨论,如下面的评论所示,更新如下。

@Nazgulled 发现我的几何级数和他实际需要的手动值之间存在以下关系,以确保平滑的淡入淡出动画。

关系如下: I ♥ Graphs! :)

这意味着几何/指数级数是正确的选择。

在我花了几个小时试图找出适合右侧图表的适当曲线并推导出适当的方程后,@Nazgulled 告诉我 Wolfram|Alpha 可以做到这一点。真的太棒了。 :)

Wolfram Alpha link

他现在应该得到他想要的东西,除非上面的方程出现非常高的误差。

关于performance - 计算淡入淡出动画不同速度的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978599/

24 4 0
文章推荐: c# - 从枚举中选择剩余元素的最优雅的方式
文章推荐: Knockout.js:将对象绑定(bind)为