本文へスキップ

Animate with springs

2024.03
AppleのWWDC23で示されたばねアニメーションの3つの式を、減衰振動の微分方程式から導出する

Animate with springs - WWDC23 - Videos - Apple Developer

アップルのWWDC23において、ばねの運動を用いたiOSアニメーションについて解説されている。

動画内ではこれらの運動方程式のグラフを用いた説明がなされているが、ここでは減衰振動を線形微分方程式から導き出す過程を、備忘録として残しておきます。

前提として動画の解説では、下記3種類のパターンについての定義が記されており、これはそれぞれ(1)過減衰、(2)臨界減衰、(3)減衰振動を表す。

(A×eat+B×e−at)×e−ct(0%>bounce)(1)(A \times e^{at} + B \times e^{-at}) \times e^{-ct}\tag{1}\\ (0\% > bounce) (A×t+B)×e−ct(bounce=0%)(2)(A \times t + B) \times e^{-ct}\tag{2}\\ (bounce = 0\%) A×cos⁡(a×t+b)×e−ct(bounce>0%)(3)A \times \cos(a \times t+b) \times e^{-ct}\tag{3}\\ (bounce > 0\%)

運動方程式

減衰振動は下記で表される。ここでmmは質量、ccは減衰係数、kkはばね定数、x(t)x(t)は位置を表している。

mx¨(t)+cx˙(t)+kx(t)=0......(*)m\ddot{x}(t) + c\dot{x}(t) + kx(t) = 0 \tag*{......(*)}

ここから減衰振動の一般解を求める。下記を定義し

ω0=km, γ=c2mω_0 = \sqrt{\frac{k}{m}},\ γ = \frac{c}{2m}

これを代入すると、

x¨(t)+2γx˙(t)+ω02x(t)=0\ddot{x}(t) + 2γ\dot{x}(t) + ω_0 ^ 2x(t)= 0

となる。さらに

x(t)=eλtx(t) = e^{λ t}

と仮定して、これを代入すると

d2dt2eλt+2γddteλt+ω02eλt=0λ2eλt+2γλeλt+ω02eλt=0λ2+2γλ+ω02=0\begin{align*} \frac{d^2}{dt^2} e^{λ 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*}

となり、λλについての二次方程式となる。これは二次方程式の解より

λ=−γ±γ2−ω02λ = - γ \pm \sqrt{γ^2 - ω_0 ^ 2}

が求められる。

ここでルートの中身に着目すると、

γ>ω0γ=ω0γ<ω0\begin{align*} &γ > ω_0\tag{1}\\ &γ = ω_0\tag{2}\\ &γ < ω_0\tag{3} \end{align*}

の3パターンに分けられる。このとき、

γ=ζ⋅ω0ζ=γω0\begin{align*} γ &= ζ \cdot ω_0\\ ζ &= \frac{γ}{ω_0} \end{align*}

と置くと

ζ>1ζ=10<ζ<1\begin{gather*} ζ > 1 \tag{1} \\ ζ = 1 \tag{2} \\ 0 < ζ < 1 \tag{3} \end{gather*}

と場合分けができ、このときのζζを減衰比という。

(1)を過減衰、(2)を臨界減衰、(3)を減衰振動を表す。

過減衰

ここから過減衰についての一般解を求める。

γ>ω0λ=−γ±γ2−ω02γ > ω_0\\ λ = - γ \pm \sqrt{γ^2 - ω_0 ^ 2}

ルートの中身に着目すると、λ±λ±は共に負の実数となる。

......(*)をアップルの式に近づけるべく式変形させると、

x(t)=C1eλ+t+C2eλ−t=C1e(−γ+γ2−ω02)t+C2e(−γ−γ2−ω02)t=C1e−γteγ2−ω02t+C1e−γte−γ2−ω02t=(C1eγ2−ω02t+C2e−γ2−ω02t)⋅e−γt\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×eat+B×e−at)×e−ct(A \times e^{at} + B \times e^{-at}) \times e^{-ct}

臨界減衰

ここから臨界減衰についての一般解を求める。

γ=ω0γ = ω_0

ということは、λは重解−γ-γとなる。

λ±=−γλ_\pm = - γ

このとき、......(*)を満たす解というのは、

x(t)=Ce−γtx(t) = C e^{-γt}

となる。このままだと二階微分方程式の解に任意定数が1つしかないことになる。

そこで定数として考えていたCCを時間ttに関する関数として置換する。

つまり、

x(t)=C(t)e−γtx(t) = C(t) e^{-γt}

と考えることにより、ttに関して微分するとき、C(t)C(t)もまた微分されることになる。

ここで先に二階微分方程式の変形式を先に提示しておく。

d2dx2[f(x)g(x)]=f′′(x)g(x)+2f′(x)g′(x)+f(x)g′′(x)\frac{d^2}{dx^2}[f(x)g(x)] = f''(x)g(x) + 2f'(x)g'(x) + f(x)g''(x)

上記を踏まえて、......(*)を変形していく。

x¨(t)+2γx˙(t)+ω02x(t)=0C¨e−γt−2γC˙e−γt+γ2Ce−γt+2γC˙e−γt−2γ2Ce−γt+ω02Ce−γt=0C¨−2γC˙+γ2C+2γC˙−2γ2C+ω02C=0C¨+γ2C−2γ2C+ω02C=0C¨=0\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} &= 0 \end{align*}

定数A, Bを用いて表すと

C¨=0C˙=AC=At+B\begin{align*} \ddot{C} &= 0\\ \dot{C} &= A\\ C &= At + B\\ \end{align*}

よって......(*)の一般解は、

x(t)=Ce−γtx(t)=(At+B)e−γt\begin{align*} x(t) &= C e^{-γt}\\ x(t) &= (At + B) e^{-γt} \end{align*}

となる。これでアップルの式と同じ形になった。

(A×t+B)×e−ct(A \times t + B) \times e^{-ct}

減衰振動

ここから減衰振動についての一般解を求める。λλを虚数を用いて式変形させると下記のようになる。

λ=−γ±iω(ω=ω02−γ2)λ = - γ \pm iω\\ (ω = \sqrt{ω_0 ^ 2 - γ ^ 2})

よって最初に定義した......(*)の一般解(線形結合)は、

x(t)=C1eλ+t+C2eλ−t=C1e(−γ+iω)t+C2e(−γ−iω)t=e−γt(C1eiωt+C2e−iωt)\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*}

と表すことができる。ここでオイラーの公式を用いる。公式は下記の通り。

eiθ=cos⁡⁡(θ)+isin⁡⁡(θ)e ^{i\theta} = \cos⁡(\theta)+i\sin⁡(\theta)

これより、上記式はこのように書き換えられると分かる。

eiωt=cos⁡⁡(ωt)+isin⁡⁡(ωt)e−iωt=cos⁡⁡(ωt)−isin⁡⁡(ωt)e ^{iωt} = \cos⁡(ωt)+i\sin⁡(ωt)\\ e ^{-iωt} = \cos⁡(ωt)-i\sin⁡(ωt)

これらを元の式に代入して変形させると、

x(t)=e−γt{(C1+C2)cos⁡(ωt)+i(C1+C2)sin⁡(ωt)}x(t) = e ^ {-γt} \{(C_1 + C_2) \cos(ωt) + i(C_1 + C_2) \sin(ωt)\}

更にこれを定数に置き換えると、

x(t)=e−γt{Acos⁡(ωt)+Bsin⁡(ωt)}(A=C1+C2, B=i(C1+C2))x(t) = e ^ {-γt} \{A \cos(ωt) + B \sin(ωt)\}\\ ( A = C_1 + C_2, \ B = i(C_1 + C_2) )

が得られる。

ここで三角関数の合成を使って更に式変形させ、

x(t)=Ccos⁡(ωt+ϕ)e−γt(C=A2+B2, tan⁡(ϕ)=−BA)x(t) = C \cos(ωt + \phi)e ^ {-γt}\\ (C = \sqrt{A^2 + B^2},\ \tan(\phi) = - \frac{B}{A})

が導き出された。

これで最初のアップルの公式と同じ形ができた(C,φC, φは初期条件により決まる任意定数)。

A×cos⁡(a×t+b)×e−ctA \times \cos(a \times t+b) \times e^{-ct}