使用初始速度和衰减计算减速时间

发布于 2024-12-07 04:32:15 字数 267 浏览 1 评论 0原文

我正在尝试计算 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倒带 2024-12-14 04:32:15

首先,您所说的加速度实际上是以每帧像素为单位的速度/速度。

从第一帧(第 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文