HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

【物理シミュレーションに挑戦!】古典力学
斜面を転がる剛体球運動の計算アルゴリズム19:任意の経路に拘束された剛体球の運動

文責:遠藤 理平 (2016年11月 3日) カテゴリ:仮想物理実験室(325)計算物理学(165)

本項は古典力学の様々な系の物理現象を解析的に扱うのではなく、数値計算による物理シミュレーションを実行するために必要な計算アルゴリズムを示すことを目的とします。 様々な初期条件に対する物理シミュレーションを実現するために、最も汎用的な直交座標系を用います。
斜面を転がる剛体球運動の計算アルゴリズム1:摩擦力無しの場合
斜面を転がる剛体球運動の計算アルゴリズム2:摩擦力無しの場合の例(曲面上の運動)
斜面を転がる剛体球運動の計算アルゴリズム3:静止摩擦力のみの場合
斜面を転がる剛体球運動の計算アルゴリズム4:静止摩擦力のみの場合の例(曲面上の運動)
斜面を転がる剛体球運動の計算アルゴリズム5:滑りながら転がる剛体球
斜面を転がる剛体球運動の計算アルゴリズム6:滑りながら転がる剛体球(曲面上の運動)
斜面を転がる剛体球運動の計算アルゴリズム7:空気抵抗力と転がり摩擦抵抗力
斜面を転がる剛体球運動の計算アルゴリズム8:斜面との衝突する剛体球(回転なし)
斜面を転がる剛体球運動の計算アルゴリズム9:斜面との衝突する剛体球(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム10:剛体球同士の衝突(回転なし)
斜面を転がる剛体球運動の計算アルゴリズム11:複数剛体球の同時衝突(回転なし)
斜面を転がる剛体球運動の計算アルゴリズム12:接触中の剛体球に衝突した場合(回転なし)
斜面を転がる剛体球運動の計算アルゴリズム13:剛体球同士の衝突(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム14:固定された剛体球に衝突した場合(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム15:力学的エネルギー保存則を満たした斜面との衝突(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム16:力学的エネルギー保存則を満たした剛体球同士の衝突(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム17:力学的エネルギー保存則を満たした複数剛体球の同士衝突(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム18:拘束された剛体球に衝突する剛体球(回転あり)
斜面を転がる剛体球運動の計算アルゴリズム19:任意の経路に拘束された剛体球の運動

最近はもはや斜面を転がってませんが本シリーズを続けていきます。本項はタイトルのとおり、任意の経路に拘束された剛体球の運動についてです。

電車が線路の上を走行するように、剛体球が任意の経路上を運動する場合を考えます。この場合、剛体球には運動が経路上に留まるように拘束力が働きます。この拘束力は経路の形状だけでなく、その時の速度にも依存し、さらには外部から剛体球に加わる外場にも依存します。媒介変数で表した任意の経路上を運動する剛体球に加わる拘束力の一般的な導出は拙著「HTML5による物理シミュレーション【剛体編2】」で示しました。本項では、計算アルゴリズムの紹介を行います。まず、経路の特徴を表す3つのベクトル量を列挙します(9.2節「経路の解析的取り扱い」を参照)。その後に拘束力の表式を示します。

(1)経路の位置ベクトルを媒介変数で表す

経路の絶対座標における位置を \mathbf{r}_{\rm path} として、経路を媒介変数表示で表します。

\mathbf{r}_{\rm path} (l) =  \mathbf{r}_{\rm path} (\theta)=(x(\theta),y(\theta),z(\theta))

ただし、 l はパスの始点からの距離、 \theta は任意の媒介変数です。

(2)経路の接線ベクトルを媒介変数で表す

経路の任意の地点 \mathbf{r}_{\rm path}(l) の接線ベクトル \mathbf{t}_{\rm path} (l) を導出します。

\mathbf{t}_{\rm path} (l) = \frac{ d \mathbf{r}_{\rm path} (l)  }{dl} =  \frac{d\theta}{dl}  \,\frac{ d \mathbf{r}_{\rm path}(\theta)  }{d\theta}

ただし、係数の d\theta/dl は以下のとおり与えられます。

\frac{d\theta }{d l} = \frac{1}{\sqrt{ \left(\frac{d x}{d \theta}\right)^2+\left(\frac{d y}{d \theta}\right)^2+\left(\frac{d z}{d \theta}\right)^2}}

(3)経路の曲率ベクトルを媒介変数で表す

経路の任意の地点 \mathbf{r}_{\rm path}(l) の曲率ベクトル \mathbf{\chi} (l) を導出します。

\mathbf{\chi} (l)  = \frac{ d \mathbf{t}_{\rm path} (l)  }{dl} = \frac{d^2\theta}{dl^2}  \,\frac{ d \mathbf{r}_{\rm path}(\theta)  }{d\theta} + \left(\frac{d\theta}{dl}  \right)^2\frac{ d^2 \mathbf{r}_{\rm path}(\theta)  }{d\theta^2}

ただし、係数の d^2\theta/d l^2

\frac{d^2\theta }{d l^2} = \left(\frac{ d\mathbf{r}_{\rm path}(\theta)  }{d\theta}\right)\cdot\left(\frac{ d^2\mathbf{r}_{\rm path}(\theta)}{d\theta^2}\right)/\left|\frac{ d\mathbf{r}_{\rm path}(\theta)  }{d\theta}\right|^4

(4)経路拘束力の表式

導出は省きますが、経路に留めるための拘束力(経路拘束力)の表式は次のとおりです(9.3節「任意の経路に拘束された運動の計算アルゴリズム」を参照)。

\mathbf{S} (t) =m\left[ \mathbf{a}_0(t)+ \frac{d^2 l}{dt^2}\, \mathbf{t}_{\rm path} (l)+ \left(\frac{d l}{dt}\right)^2 \mathbf{\chi } (l)  \right]-\mathbf{F} (t)

ただし、 \mathbf{F} (t)は 重力などの外場、 \mathbf{a}_0(t) は経路そのものが移動する場合の加速度速度ベクトルです。2つの係数 d l /dtd^2 l / dt^2 は次のとおりです。

\frac{dl}{dt} = (\mathbf{v} (t) - \mathbf{v}_0(t))\cdot  \mathbf{t}_{\rm path} (l)
\frac{d^2 l}{dt^2} =  \frac{1}{m} \left[\mathbf{F} (t)\cdot\mathbf{t}_{\rm path} (l) \right]  - \mathbf{a}_0(t)\cdot\mathbf{t}_{\rm path} (l)

\mathbf{v}_0(t)は経路そのものが移動する場合の速度ベクトルです。

経路の接線ベクトル、曲率ベクトルと経路そのものの運動が与えられていて、剛体球に加わる外力と速度ベクトルが得られていれば、その時点における経路拘束力が得られます。あとはニュートンの運動方程式に従って運動を計算するだけとなります。

円形経路に拘束された剛体球

次のグラフィックスは、円形経路に拘束された剛体球が重力で運動するシミュレーションです。重力加速度などのパラメータを変更すると対応した運動を行います。

放物線経路に拘束された剛体球

次のグラフィックスは、放物線経路に拘束された剛体球が重力で運動するシミュレーションです。重力加速度などのパラメータを変更すると対応した運動を行います。

参考図書

3次元グラフィックス関連

three.jsによるHTML5グラフィックス上 【改定版】
three.jsによるHTML5グラフィックス下 【改定版】
three.jsによるHTML5 3Dグラフィックス 【新機能と応用】

物理シミュレーション関連

HTML5による物理シミュレーション
HTML5による物理シミュレーション【拡散・波動編】
HTML5による物理シミュレーション 【剛体編1】
HTML5による物理シミュレーション 【剛体編2】



▲このページのトップNPO法人 natural science トップ

関連記事

仮想物理実験室







計算物理学

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました