「physics.js」による仮想物理実験室
球体に空気抵抗を与えよう~抵抗力の与え方~

文責:遠藤理平
公開日:2017年03月12日
最終更新日:2017年03月12日

はじめに

 本項物理シミュレーション環境構築用HTML5フレームワーク「physics.js」を用いて物理シミュレーションを行うための手順をチュートリアル形式で紹介する記事です。 最新版「physics.js」(リビジョン14、2017年03月12日現在)をここからダウンロードしてください。以下はチュートリアルの目次です。

空気抵抗力を与えた放物運動

 本項では空気中を運動する際に生じる抵抗力である空気抵抗力を導入します。 図1は「球体に重力を与えよう!~一定力の与え方~」で解説した放物運動を行う球体(全て同じ初速度)に異なる空気抵抗力を与えた結果です。 一番飛んでいる球体(左端)は空気抵抗力無しの場合で、それ以降は空気抵抗力の大きさを表す係数を0.2ずつ大きくしています。空気抵抗力が大きいほど軌跡が放物線からズレていき、飛距離が短くなっていることがわかります。なお、空気抵抗力の定義は後述します。

(図1)空気抵抗力を与えた放物運動の様子

球体の回転運動+床面との衝突
実際の仮想物理実験室はこちら

空気抵抗力の与え方

 空気抵抗力も仮想物理実験室オブジェクトのsetInteractionメソッドで追加することができます。 重力の場合と同様、空気抵抗力も相互作用のペアが存在しないので、第一引数に仮想物理実験室オブジェクトを、第二引数に空気抵抗力の対象となる球体オブジェクトを与えます。第三引数には空気抵抗力を意味するステート定数「PHYSICS.AirResistanceForce」を、第四引数に空気抵抗力の大きさを表す係数を与えます。
 今回、異なる抵抗力に対する運動を比較しやすくするために、6個の球体オブジェクトの生成と空気抵抗力の設定を、繰り返し文を用いて行っています。

【プログラムソース1】空気抵抗力の与え方(balls_gravity_AirResistance.html)
////////////////////////////////////////////////////////////////////
// 球オブジェクトの準備
PHYSICS.physLab.balls = [];
for( var i = 0; i<6; i++ ){
	PHYSICS.physLab.ball = new PHYSICS.Sphere({ ~ 省略 ~ });
	//球オブジェクトを登場
	PHYSICS.physLab.objects.push( PHYSICS.physLab.balls[ i ] );

	////////////////////////////////////////////////////////////////////
	// 相互作用の準備
	////////////////////////////////////////////////////////////////////
	//重力の設定
	PHYSICS.physLab.setInteraction( ~省略~ );
	//空気抵抗力の設定
	PHYSICS.physLab.setInteraction(
		PHYSICS.physLab,
		PHYSICS.physLab.balls[ i ],
		PHYSICS.AirResistanceForce,
		{
			beta : i*0.2, //粘性抵抗係数(速度に比例する係数)
			gamma : 0	  //慣性抵抗係数(速度の2乗に比例する係数)
		}
	);
}
//仮想物理実験室のスタートメソッドの実行
PHYSICS.physLab.startLab();

物理学のはなし5:空気抵抗力の定義

 空気抵抗力は日常生活でもよく実感する力だと思います。空気抵抗力の起源は空気分子の衝突ですが物理学ではどのように定義されるでしょうか。空気抵抗力には次に挙げる特徴があります。自転車に乗って坂道を下っていることなどを想像しながら考えて見てください。

(1) 止まっているときは空気抵抗力は生じない
(2) 空気抵抗力は進行方向とは反対向きに生じる
(3) 物体の速度が大きくなるほど空気抵抗力は大きくなる
(4) 物体の断面積が大きいほど空気抵抗力は大きくなる
(5) 物体の断面積が同じでも流線型のような形の方が空気抵抗力は小さくなる
(6) 物体の断面積が同じでもパラシュートのような形の方が空気抵抗力は大きくなる

どれも直感的に理解できると思いますが、これらの特徴を踏まえて空気抵抗力はどのように定義することができるでしょうか。 まず、空気抵抗力f(v)は(1)~(3)から速度vを用いて次のように表すことができます。

f(v) = - a_1 v - a_2 v^2 - a_3 v^3 -\cdots

これは、f(v)は速度の関数であることは分かっていますがどのような関数形かわからないので テーラー展開(vのべき級数展開)した結果です。
 次に(4)~(6)について考えてみましょう。新幹線のような流線型の場合には速度が大きくなっても空気抵抗力の大きくなり方は緩やかであるのに対して、パラシュートのような形の場合はその反対です。 この違いは空気抵抗力の起源である空気分子の動きの違いによって状況が全く異なります。流線型にぶつかった空気分子は物体の表面をなでるに進んで物体の後ろに回り込もうとします。 それに対して、パラシュートにぶつかった空気分子は反対方向へ跳ね返されます。つまり、これは単に係数(a_1, a_2など)の大小だけでなく両者は物体の速度に対する依存性が異なることを意味します。この違いを表すのがvの次数です。流線型の空気抵抗は粘性抵抗、パラシュート型の空気抵抗は慣性抵抗と呼ばれ、それぞれvの1次と2次に比例する抵抗力として定義されます。そして、それぞれの係数は粘性抵抗係数 \beta慣性抵抗係数 \gammaと呼ばれます。ここでは触れませんが両係数とも物理的な明確な意味づけがなされています。
 空気抵抗力はこの係数を用いて改めて次のように定義されます。

f(v) = - \beta v - \gamma v^2

物体の形状が特殊な場合にはvの3次以降の項も存在することも考えられますが通常は無視します。 また、両係数とも形状から見積るのではなく、実際に速度に対する空気抵抗力を計測して両係数を実験的に見積るということを行います。