読者です 読者をやめる 読者になる 読者になる

倭算数理研究所

科学・数学・学習関連の記事を、「倭マン日記」とは別に書いていくのだ!

回転しているようにみえる白いドットは単振動している

調和振動子 シミュレーション

最近ちょっと話題になっている動画

が面白かったのでちょっと数学使ってイジってみました。 白いドットひとつひとつは直線上を往復運動しているそうですが、往復運動にもいろいろあるのでそれがどんな運動なのかを見ていきましょう。 まぁ、今の場合、一番単純であろう往復運動である単振動なんですけど。

外側の円  { C_o }

通常の  { xy } 平面を考えます。 外側の円  { C_o } を、中心が原点  { O }、半径  { 2r } としましょう。 円の方程式は

  { \displaystyle
    C_o \, : \, x^2 + y^2 = 4r^2
}

となります。

内側の円  { C_i }

動画を観察すると、内側の(白いドットが作る、白いドットが乗っている)円  { C_i } の直径は外側の円  { C_o } の半径であることが分かります。 つまり、 { C_i } の半径は  { r } となります。 まぁ、そうなるように  { C_o } の半径を  { 2r } にしたんですが。

また、 { C_i } の中心を  { P_i } とします。  { C_i } は原点の周りを一定の角速度で回っているように見えるので、その角速度を  { \omega } としましょう。 このとき、時刻  { t } における  { P_i } の座標は

  { \displaystyle
    (r\cos\omega t,\,r\sin\omega t)
}

となります( { t=0 } のときに  { x } 軸上にあるとします)。 よって、時刻  { t } における  { C_i } の方程式は以下で与えられます:

  { \displaystyle
    (x - r \cos\omega t)^2 + (y - r \sin\omega t)^2 = r^2
  }

当然のことながらこの円は常に原点を通ります。

 { C_i } { x } 軸との交点

では、一つの白いドットに注目したときに、それがどんな(往復)運動をしているのかを見てみましょう。 白いドットは内側の円  { C_i } と原点を通る直線との交点に位置します。 簡単のため、まずは原点を通る直線として  { x } 軸を考えましょう。  { x } 軸の方程式は言わずと知れた  { y = 0 } なので、これと円  { C_i } の方程式を連立して解くと

  { \displaystyle
\begin{align*}
    & (x - r \cos\omega t)^2 + r^2 \sin^2\omega t = r^2 \\
    & (x - r \cos\omega t)^2 = r^2 \cos^2 \omega t \\
    & x - r \cos\omega t = \pm r \cos \omega t \\
    \therefore \; & x = 0,\, 2r \cos\omega t
\end{align*}
}

当然のことながら常に  { y = 0 } なので、 { x = 0 } は原点となり(重解のとき以外は)興味ないので捨てましょう。 よって交点の座標  { A_0 }

  { \displaystyle
    A_0( 2r \cos\omega t, \, 0)
}

で与えられ、その運動が振幅  { 2r }、角振動数  { \omega } の単振動であることが分かりました。

原点を通る任意の直線と円  { C_i } との交点

上記の  { x } 軸との交点はたまたま単振動になった可能性もあるので(系の対称性からそれはないけどね)、一応  { x } 軸の代わりに任意の原点を通る直線の場合を考えてみましょう。

原点を通る直線として、 { x } 軸とのなす角が  { \theta } の直線  { \ell_\theta } を考えましょう。 ただし  { 0 \leqq \theta < \pi } とします。 直線の方程式は

  { \displaystyle
    \ell_\theta \,:\,y = x \tan \theta
  }

これと円 { C_i } の方程式を連立して解くと

  { \displaystyle
\begin{align*}
    & (x - r\cos\omega t)^2 + (x \tan\theta - r \sin\omega t)^2 = r^2 \\
    & \left(1 + \tan^2\theta\right) x^2 - 2rx\left(\cos\omega t + \tan\theta\sin\omega t\right) = 0 \\
    & \frac{x^2}{\cos^2\theta} - \frac{2rx}{\cos\theta} \left(\cos\theta \cos\omega t + \sin\theta \sin \omega t \right) = 0 \\
    & \frac{x^2}{\cos^2\theta} - \frac{2rx}{\cos\theta}\cos(\theta - \omega t) = 0 \\
    & \frac{x}{\cos^2 \theta}\left\{ x - 2r \cos\theta\cos(\theta - \omega t) \right\} = 0
\end{align*}
  }

前節と同様、 { x = 0 } の方は(重解にならないときは)捨てることにすると

  { \displaystyle
    x = 2r \cos\theta \cos(\theta - \omega t)
}

{ \ell_\theta } の方程式 { y= x \theta } から { y } もすぐに出て、結局、交点の座標 { A_\theta }

  { \displaystyle
    A_\theta (2r \cos \theta\cos(\theta - \omega t) ,\, 2r \sin\theta \cos(\theta - \omega t))
}

となります。 これは { r,\,\theta } が定数なので単振動であることが分かりますね。

まぁ、別に必要ない変形ですが・・・

 { A_\theta } の座標を三角関数の積和の公式を使ってもう少し変形することができます。 積和の公式については『三角関数の公式を復習する (8) : 三角関数の積和の公式』などを参照。

  { \displaystyle
    \left(\frac{2r\cos\omega t + 2r\cos(2\theta - \omega t)}{2},\,\frac{2r\sin\omega t + 2r\sin(2\theta - \omega t)}{2}\right)
}

これは  { A_\theta } が以下の2点  { B_\theta,\,C_\theta }

  { \displaystyle
\begin{align*}
    & B_\theta (2r\cos\omega t ,\, 2r\sin\omega t) \\
    & C_\theta (2r\cos(2\theta - \omega t) ,\, 2r\sin(2\theta - \omega t))
\end{align*}
}

の中点であることを示しています。 点  { B_\theta,\,C_\theta } は外側の円  { C_o } の円周上をそれぞれ

  • { B_\theta } : 点 { (2r,\,0) } から反時計回りに
  • { C_\theta } : 点 { (2r\cos 2\theta,\, 2r \sin 2\theta) } (これは直線 { \ell_\theta } に関して点 { (2r,\, 0) } と対称な点)から時計回りに

角速度  { \omega } で等速円運動します。 { B_\theta,\,C_\theta } は任意の時刻において直線  { \ell_\theta } に関して対称な位置にあり、よってその中点は常に { \ell_\theta } 上にあることが分かります。 また、 { A_\theta } の運動は { B_\theta } (もしくは { C_\theta })の等速直線運動を直線  { \ell_\theta } に射影した運動なので、単振動になります。

ドットの運動が分かったので

ドットの運動を表す式が分かったので、誰かアニメーション作ってみませんか? elm とかって言語ならブラウザ上で動かせるようなのでコーディング練習に丁度いいんじゃないかなぁ。

ゲーム開発のための数学・物理学入門 改訂版 (Professional game programming)

ゲーム開発のための数学・物理学入門 改訂版 (Professional game programming)