使用初始速度和衰减计算减速时间
我正在尝试计算 Flash 中的影片剪辑减速到零所需的时间。起始速度会有所不同,但出于示例目的,我们可以说:
每秒帧数:30
速度:50
衰减:.8 * 每帧当前速度
onEnterFrame(event:Event):void
{
movieClip.x += speed;
speed *= .8;
}
我如何计算出减速到所需的时间(以秒为单位)或总帧数零?
谢谢!
I'm trying to calculate the time it will take a movieclip in Flash to decelerate to zero. The starting speed will vary, but for purpose of example lets say:
Frames Per Second: 30
Speed: 50
Decay: .8 * current speed each frame
onEnterFrame(event:Event):void
{
movieClip.x += speed;
speed *= .8;
}
How would I figure out the time in seconds or in total frames it would take to decelerate to zero?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,您所说的加速度实际上是以每帧像素为单位的速度/速度。
从第一帧(第 i 帧)开始,当您开始以 0.8 倍调整速度时,您可以将速度表示为:
v(i) = v(i-1) * 0.8
并且 v(0) = 50
您可以使用 v(0) 将 v(i) 重新表示为:
v(i) = v(0) * 0.8i
我可以想到 2 种不同的停止条件:
1。 v(i) < 1(含义:速度低于 1 像素/帧)
2. v(i)-v(i+1)< 0.1(意思是:帧之间的速度变化小于 0.1 px)
对于第一个你得到的:
v(0) * 0.8i 1
0.8i < 1 / v(0)
i > log0.8(1 / v(0))
使用 logb(x) = loga(x) / loga(b) 更改对数底:
i > ln(1 / v(0)) / ln(0.8)
i > ln(1 / 50) / ln(0.8)
i > 17.531
对于第二个你得到:
v(0)*0.8i - v(0)*0.8i+1 < 0.1
v(0)*0.8i - v(0)*0.8i * 0.8 0.1
v(0)*0.8i * (1 - 0.8) < 0.1
0.8i < 0.1/(v(0)*(1-0.8))
i> log0.8(0.1 / (v(0) * (1 - 0.8)))
i > ln(0.1 / (v(0) * (1 - 0.8))) / ln(0.8)
i > ln(0.1 / (50 * (1 - 0.8))) / ln(0.8)
i > 20.638
因此,根据这些数字,您将获得大约 20 帧的时间,直到运动停止。
根据您的需要调整数字。
First of all, what you call acceleration is in fact speed/velocity in pixels per frame.
Starting from the very first frame (i-th) when you start adjusting velocity by a factor of 0.8 you can express the velocity as:
v(i) = v(i-1) * 0.8
and v(0) = 50
You can reexpress v(i) using v(0) as:
v(i) = v(0) * 0.8i
I can think of 2 different stop conditions:
1. v(i) < 1 (meaning: velocity drops below 1 px/frame)
2. v(i) - v(i+1) < 0.1 (meaning: velocity changes by less than 0.1 px between frames)
For the first you get:
v(0) * 0.8i < 1
0.8i < 1 / v(0)
i > log0.8(1 / v(0))
changing the logarithm base using logb(x) = loga(x) / loga(b):
i > ln(1 / v(0)) / ln(0.8)
i > ln(1 / 50) / ln(0.8)
i > 17.531
For the second you get:
v(0)*0.8i - v(0)*0.8i+1 < 0.1
v(0)*0.8i - v(0)*0.8i * 0.8 < 0.1
v(0)*0.8i * (1 - 0.8) < 0.1
0.8i < 0.1 / (v(0) * (1 - 0.8))
i > log0.8(0.1 / (v(0) * (1 - 0.8)))
i > ln(0.1 / (v(0) * (1 - 0.8))) / ln(0.8)
i > ln(0.1 / (50 * (1 - 0.8))) / ln(0.8)
i > 20.638
So, with these numbers you get about 20 frames worth of time till the movement stops.
Tweak the numbers as you see fit.