Game Development #21 砲弾の貫通判定

tank_20150204150947

砲弾が戦車の装甲に当たったときの計算式を考えてみました。これまでは攻撃力や防御力の値から適当な計算をしていましたが、何かしら統一感と説得力のある計算式が欲しいと思い、いろいろ調べて実装してみました。

 

砲弾の貫通

bullet_penetration_01

砲弾が装甲を貫通する計算は、あまり専門的で複雑なものではなくシンプルな物理計算式を考えてみました。運動エネルギーと反発力で等式を立てて、当時のドイツ軍の貫通データを参考に装甲の抵抗力を求めてみました。装甲の抵抗力がわかれば、弾丸の重さと口径、速度の値でどれだけ装甲を深く貫通できるかを計算することができます。

パンター戦車(Kwk42/L70)の砲を例にして計算すると

砲弾の重量:6.8[kg]
初速:935[m/s]
砲弾の直径:75[mm]
装甲貫通力:138[mm]

砲弾の断面積は直径から、0.075^2 * π / 4 = 0.0044[m^2]と計算できます。運動エネルギーは0.5 * 6.8 * 935 ^ 2 = 2972365[J]になります。これらの値から装甲の抵抗力はおよそ4,875,000,000[N/m^2]と計算できます。

ティーガー戦車(Kwk36/L56)の場合

砲弾の重量:10.2[kg]
初速:810[m/s]
砲弾の直径:88[mm]
装甲貫通力:120[mm]

これらの値で計算すると、装甲の抵抗力は4,584,000,000[N/m^2]ぐらいです。

他の砲弾データを使ってもだいたいこの辺りの数値が出るので平均を取ったものを抵抗力の定数としました。抵抗力がわかったので、後は速度や重量の値を入れ替えればどれくらいの貫通力を得られるか計算できます。これで貫通判定が出来るようになりました。

ちなみに砲弾は空気抵抗で速度が落ちますが、速度が十分大きく発射から着弾までほとんど一瞬なのでその辺りは考慮していません。

 

傾斜装甲の厚さ

slope_armor

図のように進入角によって砲弾から見た装甲の厚さが変わります。傾斜装甲は斜めから当たりやすくすることによって本来より厚みを得て、貫通し難くし、弾きやすくできるメリットがあるわけです。おまけに入射角が浅ければ浅いほど砲弾からのエネルギーが分散されるのでますます効果大ですね。

コリジョンの計算時に砲弾のベクトルと装甲の法線から内積の公式を使って入射角を計算します。

内積 = Dot(A, B) = |A||B|Cosθ

なので、

Cosθ = Dot(A, B) / |A||B|

となり、アークコサインを使えば入射角θが求まります。そして通常の厚みをSinθで割れば見かけ上の厚みが求まります。この見かけ上の厚みと貫通の深さを比べて貫通判定をします。

 

弾かれた砲弾

砲弾が装甲を貫通しなかった場合、弾かれて彼方へ飛んでいくようにしました。弾く方向は反射ベクトルでもよかったのですが見栄え的に壁に沿ったほうが格好良かったのでそちらを使うことにしました。内積を復習するよいきっかけになったので図にまとめてみました。

dot_product

高校で勉強した内容そのままですが、内積について自分なりの理解を図にしてみました。どちらかをどちらかへ投影して掛け算したものが内積の値になります。片方のベクトルの長さが1の場合、投影したベクトルの長さは内積の値になります。これが次の図につながります。

 

dot_parallel_20150726

壁に平行なベクトルの求め方です。係数aは進行ベクトルFの逆ベクトルを法線に投影した長さになります。正規化された法線の長さは1なので法線に投影した進行ベクトル(逆)の長さaはそのまま進行ベクトル(逆)と法線ベクトルの内積の値になります。後はFとaNを足したベクトルが平行ベクトルPになるというわけですね。

 

tank_20150205152445

装甲に弾かれ彼方へ飛んでいく砲弾。この仕様にしたことでティーガーよりパンターのほうが強くなってしまいましたが、現実的にはどうだったんでしょうね。

というわけでまたゲームプログラミングのおかげで物理や数学のよい勉強になりました。

広告

Game Development #21 砲弾の貫通判定」への1件のフィードバック

  1. 実際、ティーガーより、パンターの方が前面装甲は厚かったらしいね。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中