dA-tools.com

波の合成 -2-

Sin波を指数で割ると振幅の自然な減衰を表すことができます。

sin(x)/exp(x)

 

  • 自然対数:exp(0)=1なのでtimeを引数にしてもゼロによる除算が起こらないので扱いが楽です。
  • 速度=vel,減衰=decayとすると以下の式で左グラフを得ることが出来ます。

Math.sin(vel*time)/Math.exp(decay*time)

例1:振り子

振り子の「回転」に以下の式を記述

vel=30;
amp=80;
decay=2;
amp*Math.sin(vel*time)/Math.exp(decay*time);

例2: バネの伸縮

ボールの「位置」プロパティに以下の式を記述

vel=15;
amp=110;
decay=0.7;
y=amp*Math.sin(vel*time)/Math.exp(decay*time)
position+[0,y]

 
バネの「スケール」に以下の式を記述

xs=length(this_comp.layer("ball").position, position);
[ xs , scale[1]] ;

 

例3:ボールのバウンドと伸び縮み

ボールの「スケール」プロパティ

vel=30;
amp=40;
decay=1;
s=amp*Math.cos(vel*time)/Math.exp(decay*time);
thisProperty+[s,-s];

 
ボールの「位置」プロパティ

vel=30/2;
amp=100;
decay=1;
s=amp*Math.sin(vel*time)/Math.exp(decay*time);
[0,-Math.abs(s)]+position;