物体の斜方投射[空気抵抗]+α[ゲーム]


なるべく分かりやすく書くので、既習の方は飛ばしながら見てください。
\(重さm[kg]の物体がある。重力加速度をg[m/s^{2}]とする。\)
\( tの関数として、物体にかかるx軸方向の力をF_x(t)[N]、y軸方向の力をF_y(t)[N]とする。 \)
\( あくまでtの関数としたが、実装したい変数を含むものにすればいい? \)
\(物体の運動方程式は\)\[\ ma_x(t)=F_x(t) \] \[\ ma_y(t)=F_y(t) \]である。ゆえに、 \[\ a_x(t)=\frac{F_x(t)}{m} \] \[\ a_y(t)=\frac{F_y(t)}{m} \]
\(時刻tの速度v_x、v_yを求める(積分定数をCとする)。\)
\[ v_x=\int a_{x}(t)dt + C_x= \frac{1}{m}\int F_x(t)dt + C_x \]
\(t=0の時の物体のX軸方向の速度をv_{0x}とすると、\)
\[ v_{0x} = C_x \] \[ v_x = \frac{1}{m}\int F_x(t)dt + v_{0x} \]

\[ v_y=\int a_{y}(t)dt + C= \frac{1}{m}\int F_y(t)dt + C_y \]
\(同様に、t=0の時の物体のY軸方向の速度をv_{0y}とすると、\)
\[ v_{0y} = C_y \] \[ v_y = \frac{1}{m}\int F_y(t)dt + v_{0y} \]

\(次に時刻tの位置x,yを求める。\)
\[ x=\int v_{x}dt = \frac{1}{m}\int(\int F_x(t)dt)dt + v_{0x}t + C_x’\]
\[ y=\int v_{y}dt = \frac{1}{m}\int(\int F_y(t)dt)dt + v_{0y}t + C_y’\]
\( t=0の時の物体のX軸方向の座標をx_0とすると、 \)
\[ x_0 = C_x’ \] \[ x=\int v_{x}dt = \frac{1}{m}\int(\int F_x(t)dt)dt + v_{0x}t + x_0\]
\(同様に、t=0の時の物体のY軸方向の座標をy_0とすると、\)
\[ y= \frac{1}{m}\int(\int F_y(t)dt)dt + v_{0y}t + y_0\]

\(tに関わらず、F_x(t)=F_x,F_y(t)=F_yという一定の力が加わり続けた場合、\)
\[\ v_x= \frac{F_{x}t}{m} + v_{0x}\]
\[\ v_y= \frac{F_{y}t}{m} + v_{0y}\]

\[ x = \frac{F_{x}t^2}{2m} + v_{0x}t + x_0 \]
\[ y = \frac{F_{y}t^2}{2m} + v_{0y}t + y_0 \]

\(この物体をx軸方向に対して角度θの方向に投げる。\)
【空気抵抗がない場合】
\(物体は空中にあり、重力のみが加わる。また、空気抵抗が存在しないので、F_x=0,F_y=-mgである。上述の式に代入すると、\)
\[ a_x=0 \hspace{10pt} v_x = v_{0x} \hspace{10pt} x = v_{0x}t + x_0 \]
\[ a_y=-g \hspace{10pt} v_y = v_{0y} – gt \hspace{10pt} y = -\frac{gt^2}{2} + v_{0y}t + y_0 \]

【空気抵抗がある場合】
\(空気抵抗係数をkとすると、物体の運動方程式は、\)
\[ ma_x = -mkv_x \]
\[ ma_y = -mg – mkv_y \]
\[ a_x = \frac{dv_x}{dt} = -kv_x \]
\[ a_y = \frac{dv_y}{dt} = -g -kv_y \]
\[ \int \frac{1}{v_x}dv_x = -k\int dt + C \]
\[ \int \frac{1}{ v_y + \frac{g}{k}}dv_y= -k\int dt + C \]
\[ \log{v_x} = -kt + C \]
\[ \log({v_y + \frac{g}{k}}) = -kt + C \]
\( A,Bを定数として \)
\[ v_x=Ae^{-kt} \]
\[ v_y = Be^{-kt} -\frac{g}{k} \]
\( t=0の時,v_x=v_{0x},v_y=v_{0y}とすると \)
\[ v_{0x}=A \]
\[ v_{0y}=B-\frac{g}{k} \]
\[ v_x = v_{0x}e^{-kt} \]
\[ v_y = (v_{0y}+\frac{g}{k})e^{-kt}-\frac{g}{k}\]
\[ x = \int v_x dt + C = -k v_{0x}e^{-kt} + C \]
\[ x_0 = -kv_{0x} + C\] \[ C = x_0 + kv_{0x} \] \[ x = kv_{0x}(1-e^{-kt}) + x_0 \]
\[ y = \int v_y dt + C = -k(v_{0y} + \frac{g}{k})e^{-kt} – \frac{gt}{k} + C \]
\[ y_0 = -k(v_{0y} + \frac{g}{k}) + C \] \[ C = y_0 + k(v_{0y} + \frac{g}{k}) \]
\[ y = k(v_{0y} + \frac{g}{k})(1-e^{-kt}) – \frac{gt}{k} + y_0 \]
以上より、空気抵抗の有無の解析解が求められた。

【ゲーム】
次に、ゲームで物体を斜方投射する事について考える。
実際にゲームで物体を斜方投射するには、
【発射時に力を加えて、初速を決定する。または、単に初速を決定する。】
【初速は決まっていて、発射地点からマウスカーソルがある方向に発射する】
【発射後に予測される弾道のある点を、マウスカーソル等の位置として、初速度を決定する】
などが挙げられる。これらはゲームに合わせて実装するのが良いと思う。
ゲームによっては、これら以外で斜方投射をするものもあるはずなので、それはその都度実装する。

挙げた例に関して説明する。
【発射時に力を加えて、初速を決定する。または、単に初速を決定する。】
\(発射する角度θが与えられている場合は、角度θに加える力Fに対して、F_{0x}=F_0cosθ,F_{0y}=F_0sinθ\)
\(発射する角度θが与えられていない場合は、F_{0x},F_{0y}を決める。\)
\(単に、速度VからV_{0x}=V_0cosθ,V_0sinθを決定するか、V_{0x},V_{0y}を決定する。\)

【初速は決まっていて、発射地点からマウスカーソルがある方向に発射する】
初速の決め方は適当にしてもらって、マウスカーソルと発射地点の座標から初速度の角度を算出する。
\(例えば、物体を投げ出す起点(x_0,y_0)とマウス位置(X,Y)から、\) \[tanθ=\frac{Y-y_0}{X-x_0}\]
\[ θ=\arctan{\frac{Y-y_0}{X-x_0}} \]

【発射後に予測される弾道のある点を、マウスカーソル等の位置として、初速度を決定する】
これは、空気抵抗が無い場合にのみ書く。弾道は既に述べたように、
\[ x = v_{0x}t + x_0 \]
\[ y = -\frac{gt^2}{2} + v_{0y}t + y_0 \]
と表せられる。
速さは、
\[ v_x = v_{0x} \]
\[ v_y = v_{0y} – gt \]
である。
例えば、
\(マウスカーソルの位置をX,Yとする。v_xは一定だから、物体のy軸方向の速さがv_y=V_yとなる時 、\)
\(物体がマウスカーソルの位置(X,Y)に来るとすると、\)
【空気抵抗がない場合】
\[ V_y = v_{0y} – gt \]
\[ X = v_{0x}t + x \]
\[ Y = -\frac{gt^2}{2} + v_{0y}t + y_0 \]
\(求めたい変数がv_{0x},v_{0y},tの3つだから、3つの式から計算できます。\)
\[ t =\frac{\sqrt{V_y^2+2g(Y-y_0)}-V_y}{g}\]
\[ v_{0x} = \frac{g(X-x_0)}{\sqrt{V_y^2+2g(Y-y_0)}-V_y} \]
\[ v_{0y} = \sqrt{V_y^2 + 2g(Y-y_0)} \]

放物線の軌道はこんな感じですよね。

\(例えば、マウスカーソルの位置(X,Y)が、軌道の一番上に来る時、すなわち位置(X,Y)でV_y=0の時、\)
\[ t= \frac{\sqrt{2g(Y-y_0)}}{g} \]
\[ v_0x = \frac{g(X-x_0)}{\sqrt{2g(Y-y_0)}} \]
\[ v_{0y} = \sqrt{2g(Y-y_0)} \]
と表す事が出来る。
\( この例ではV_y = 0としましたが、それに限らず、例えばV_y = – V_{0y}とおくと、 \)
\( 物体が上方に飛んで、最初に発射した時と同じ高さに落ちた時の位置をマウスカーソルの位置とする事が出来る。 \)
\( 作りたいものに合わせてください。 \)
\( これで、v_{0x},v_{0y}が求まったので、軌道が求まりました。 \)
\( 予測軌道を描画するなり、好きな力を加えるなり、物体を飛ばす力に制限を付けて特徴の分かれた砲台でも作るなりしてください。 \)
\( 微分方程式の数値計算は別で書きます。 \)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です