使用 Javascript 生成从一组值到另一组值的平滑正弦波过渡

问题描述 投票:0回答:1

我想做的是从具有给定值集的正弦波平滑过渡到具有不同值的另一个波,而不在正弦波中引入扭结。我处于数学知识的边缘,所以如果任何人知道如何实现这一目标,我们将不胜感激。我看过其他问题,我有一种直觉,答案就在信号处理问题中。 相位与时间,而不是速度(或频率)与时间。只是不确定如何调整它以适合我的代码。

这一切都是通过改变翅膀图形上的 y 轴角度来在 After Effects(使用 JavaScript)中生成蝴蝶翅膀的拍动。

我用了这个公式: 振幅 * Math.sin(时间*速度)+偏差

幅度是角度的变化我希望机翼移动 速度是翅膀拍动的速度 time 是动画的时间线(以秒为单位的值) 用于改变角度的偏差(幅度 45,偏差 0,机翼从 -45 度移动到 45 度。将偏差更改为 45,机翼从 0 度移动到 90 度)

一切工作正常,直到我需要更改任何关键值幅度、速度和偏差。动画中有跳跃或闪烁。我发现了一些正在发生的事情的图形表示,但不太确定如何在代码中修复它以创建平滑过渡。

This image shows one of the kinks I'm getting

This image shows another kink in the wave

This image shows the smooth transition of what I'm trying to achieve

非常感谢您的宝贵时间以及您可能提供的任何反馈。

javascript math trigonometry after-effects
1个回答
0
投票

创建“平滑”过渡的目标并不是一个明确定义的数学描述。为了简单地使波形连续,您可以瞬时改变幅度和频率,并计算新的相位。

例如,假设您的波形是

f(t) = a*sin(w*t + p)

在时间 t_0,您希望振幅 a 更改为 A,每秒的弧度从 w 更改为 W,然后您需要计算一个新的 P,以便它们在 t = t_0 处连接。

f(t_0) = a*sin(w*t_0 + p) = A*sin(W*t_0 + P)

你可以解决这个问题

P = arcsin(f(t_0)/A) - W*t_0
© www.soinside.com 2019 - 2024. All rights reserved.