Animate with springs
Animate with springs - WWDC23 - Videos - Apple Developer
アップルのWWDC23において、ばねの運動を用いたiOSアニメーションについて解説されている。
動画内ではこれらの運動方程式のグラフを用いた説明がなされているが、ここでは減衰振動を線形微分方程式から導き出す過程を、備忘録として残しておきます。
前提として動画の解説では、下記3種類のパターンについての定義が記されており、これはそれぞれ(1)過減衰、(2)臨界減衰、(3)減衰振動を表す。
(A \times e^{at} + B \times e^{-at}) \times e^{-ct}\tag{1}\\
(0\% > bounce)
(A \times t + B) \times e^{-ct}\tag{2}\\
(bounce = 0\%)
A \times \cos(a \times t+b) \times e^{-ct}\tag{3}\\
(bounce > 0\%)
運動方程式
減衰振動は下記で表される。ここでmは質量、cは減衰係数、kはばね定数、x(t)は位置を表している。
m\ddot{x}(t) + c\dot{x}(t) + kx(t) = 0 \tag*{......(*)}
ここから減衰振動の一般解を求める。下記を定義し
ω_0 = \sqrt{\frac{k}{m}},\ γ = \frac{c}{2m}
これを代入すると、
\ddot{x}(t) + 2γ\dot{x}(t) + ω_0 ^ 2x(t)= 0
となる。さらに
と仮定して、これを代入すると
\begin{align*}
\frac{d^2}{dt^2} e^{\lambda t} + 2γ\frac{d}{dt}e^{\\λ t} + ω_0 ^ 2 e^{\\λ t} &= 0\\
λ^2e^{λt}+2γλe^{λt}+ω_0^2e^{λt} &= 0\\
λ^2 + 2γλ + ω_0 ^ 2 &= 0
\end{align*}
となり、λについての二次方程式となる。これは二次方程式の解より
λ = - γ \pm \sqrt{γ^2 - ω_0 ^ 2}
が求められる。
ここでルートの中身に着目すると、
\begin{align*}
&γ > ω_0\tag{1}\\
&γ = ω_0\tag{2}\\
&γ < ω_0\tag{3}
\end{align*}
の3パターンに分けられる。このとき、
\begin{align*}
γ &= ζ \cdot ω_0\\
ζ &= \frac{γ}{ω_0}
\end{align*}
と置くと
\begin{gather*}
ζ > 1 \tag{1} \\
ζ = 1 \tag{2} \\
0 < ζ < 1 \tag{3}
\end{gather*}
と場合分けができ、このときのζを減衰比という。
(1)を過減衰、(2)を臨界減衰、(3)を減衰振動を表す。
過減衰
ここから過減衰についての一般解を求める。
γ > ω_0\\
λ = - γ \pm \sqrt{γ^2 - ω_0 ^ 2}
ルートの中身に着目すると、λ±は共に負の実数となる。
......(*)
をアップルの式に近づけるべく式変形させると、
\begin{align*}
x(t) &= C_1 e ^ {λ_+t} + C_2 e ^ {λ_-t}\\
&= C_1 e ^ {(-γ+\sqrt{γ^2 - ω_0 ^ 2})t} + C_2 e ^ {(-γ-\sqrt{γ^2 - ω_0 ^ 2})t}\\
&= C_1 e ^ {-γt} e ^ {\sqrt{γ^2 - ω_0 ^ 2}t} + C_1 e ^ {-γt} e ^ {-\sqrt{γ^2 - ω_0 ^ 2}t}\\
&= (C_1 e ^ {\sqrt{γ^2 - ω_0 ^ 2} t} + C_2 e ^ {-\sqrt{γ^2 - ω_0 ^ 2} t}) \cdot e ^ {-γt}
\end{align*}
これでアップルの公式とほぼ同じ形になった。
(A \times e^{at} + B \times e^{-at}) \times e^{-ct}\\
臨界減衰
ここから臨界減衰についての一般解を求める。
ということは、λは重解-γとなる。
このとき、......(*)
を満たす解というのは、
となる。このままだと二階微分方程式の解に任意定数が1つしかないことになる。
そこで定数として考えていたCを時間tに関する関数として置換する。
つまり、
と考えることにより、tに関して微分するとき、C(t)もまた微分されることになる。
ここで先に二階微分方程式の変形式を先に提示しておく。
\frac{d^2}{dx^2}[f(x)g(x)] = f''(x)g(x) + 2f'(x)g'(x) + f(x)g''(x)
上記を踏まえて、......(*)
を変形していく。
\begin{align*}
\ddot{x}(t) + 2γ\dot{x}(t) + ω_0 ^ 2x(t) &= 0\\
\ddot{C} e^{-γt} - 2γ\dot{C} e^{-γt} + γ^2 Ce^{-γt} + 2γ \dot{C} e^{-γt} - 2 γ^2 C e^{-γt} + ω_0^2 C e^{-γt} &= 0\\
\ddot{C} - 2γ\dot{C} + γ^2 C + 2γ \dot{C} - 2 γ^2 C + ω_0^2 C &= 0\\
\ddot{C} + γ^2 C - 2 γ^2 C + ω_0^2 C &= 0\\
\ddot{C} + C ( ω_0^2 - γ^2) &= 0\\
\ddot{C} &= 0
\end{align*}
定数A, Bを用いて表すと
\begin{align*}
\ddot{C} &= 0\\
\dot{C} &= A\\
C &= At + B\\
\end{align*}
よって......(*)
の一般解は、
\begin{align*}
x(t) &= C e^{-γt}\\
x(t) &= (At + B) e^{-γt}
\end{align*}
となる。これでアップルの式と同じ形になった。
(A \times t + B) \times e^{-ct}
減衰振動
ここから減衰振動についての一般解を求める。λを虚数を用いて式変形させると下記のようになる。
λ = - γ \pm iω\\
(ω = \sqrt{ω_0 ^ 2 - γ ^ 2})
よって最初に定義した......(*)
の一般解(線形結合)は、
\begin{align*}
x(t) &= C_1 e ^ {λ_+t} + C_2 e ^ {λ_-t}\\
&= C_1 e ^ {(-γ+iω)t} + C_2 e ^ {(-γ-iω)t}\\
&= e ^ {-γt} (C_1 e ^ {iωt} + C_2 e ^ {-iωt})
\end{align*}
と表すことができる。ここでオイラーの公式を用いる。公式は下記の通り。
e ^{i\theta} = \cos(\theta)+i\sin(\theta)
これより、上記式はこのように書き換えられると分かる。
e ^{iωt} = \cos(ωt)+i\sin(ωt)\\
e ^{-iωt} = \cos(ωt)-i\sin(ωt)\\
これらを元の式に代入して変形させると、
x(t) = e ^ {-γt} \{(C_1 + C_2) \cos(ωt) + i(C_1 + C_2) \sin(ωt)\}
更にこれを定数に置き換えると、
x(t) = e ^ {-γt} \{A \cos(ωt) + B \sin(ωt)\}\\
( A = C_1 + C_2, \ B = i(C_1 + C_2) )
が得られる。
ここで三角関数の合成を使って更に式変形させ、
x(t) = C \cos(ωt + \phi)e ^ {-γt}\\
(C = \sqrt{A^2 + B^2},\ \tan(\phi) = - \frac{B}{A})
が導き出された。
これで最初のアップルの公式と同じ形ができた(C, φは初期条件により決まる任意定数)。
A \times \cos(a \times t+b) \times e^{-ct}
Discussion