撃ち上げ撃ち下し時の軌道変化など
山のフィールド、もしくは建造物から打つ場合では
急角度で下から上(撃ち上げ)、または上から下(撃ち下げ)に撃つ場合があります。
この時、どちらの場合でも着弾点は上にずれます。
皆様は経験上ご存知かもしれません。
何故上にずれるか?
ここでは詳しく述べませんが、これは重力が関係します。
なので、角度があり相手を狙う時は相手の膝や足元を狙うことをお勧めします。
また、今までの計算結果はゼロインの位置を一定にしていました。
しかし、実際の状況を考えた場合
「上に、下にどれくらいずれるかな?」
という判断基準を使うかもしれません。
この状況を考えました。
上下に揺れる幅を固定した時、重さによって飛距離がどのくらい変わるのでしょうか?
0.25g,ゼロイン50mを基準にして計算したグラフが上のものになります。
点は0.05秒ごとにプロットしています。
0.12gを除いて、30m程度を超えると重いBB弾ほど早く着弾し、かつ遠くまで飛ぶことが分かるかと思います。
gifアニメもあるので、詳細を知りたい方は↓へどうぞ。
上下幅が一定の時の軌道と、撃ち上げ撃ち下し時の軌道のずれについて -シキノート
このコンテンツの公開範囲 インターネット全体
コメントを受け付ける範囲 サバゲーるメンバーまで
スポンサーリンク
コメント 8
コメントするには、ログインまたはメンバー登録(無料)が必要です。
スポンサーリンク
活動中のチーム
活動中のチームはまだありません。
チェックインしたフィールド 0
チェックインはまだしていません。
シキノ
>フレンドリーファイアDさん
しばらくログインしていなかったので気づくのが遅くなりすみません。
2016/04/03時点でのサイトのコードを元にお話しします。
()内は初期設定ファイルの変数名を表します。
初期のままでは射出の速度を
水平方向の初速(vy)
上下方向の初速(vz)
を決定し、飛ばす方向へはエネルギー(energy)から決定しているため、射撃角度を決める変数(theta)は無視されています。
programの1440行あたりに、
======
x(4)=dsqrt((2d0*energy/m)-vz**2-vy**2)
x(5)=vy
x(6)=vz
! When decide by angle
! x(4)=dsqrt((2d0*energy/m)-vy**2)*dcos(pi*theta/180d0)
! x(5)=vy
! x(6)=dsqrt((2d0*energy/m)-vy**2)*dsin(pi*theta/180d0)
======
という部分があります。ここを変更して、
======
! x(4)=dsqrt((2d0*energy/m)-vz**2-vy**2)
! x(5)=vy
! x(6)=vz
! When decide by angle
x(4)=dsqrt((2d0*energy/m)-vy**2)*dcos(pi*theta/180d0)
x(5)=vy
x(6)=dsqrt((2d0*energy/m)-vy**2)*dsin(pi*theta/180d0)
======
と変更してください。これで射撃角度(theta,度数法での値)が有効になり角度を指定することができます。
>あと初期の設定ファイルに風速がZ軸に-1が入ってるのですが何か意味があったのでしょうか?
これは風ではなくvzのことでしょうか。風に関してはux,uy,uzで指定してあるので、それは下向き(z軸)に1m/sで撃つ、ということです。
上のプログラムの変更をすればvzは無視されるので、この部分の意味は無くなります。
フレンドリーファイアD
>シキノさん
詳細な解説ありがとうございます。
アンコメントしてコメントアウトしてあるところを生かしてあげればいいんですね。
手元のソースが去年にダウンロードしたせいか訂正箇所が見当たらないので最新版を落としてやってみます。
フレンドリーファイアD
あと蛇足ですがフラット軌道(上下の振れが一定の幅に収まるような軌道を仮に呼ぶ)でどのくらい飛ぶのかやってみたいのですがいまいちどう判定すればいいのかわからずとりあえず射出位置を地面すれすれに設定してゼロイン位置をループで変化させているのですが、上方向への振れ幅判定はどうにもならないでこまってます。
(別に実装して欲しいなどと差し出がましいことではないです笑)
フレンドリーファイアD
あー最新のバージョンだとupdownzで設定できるのですね!
ありがとうございます!
シキノ
>フレンドリーファイアDさん
>アンコメントしてコメントアウトしてあるところを生かしてあげればいいんですね。
その通りです。
新しくしたので、updownzで指定することで可能です!
ちなみにですが、1135行目に
====
!Stop calculation when bullet reach ground.
if(x(3).lt.0d0)exit
=====
という文があります。
ここの2行目の文の意味は、z軸方向、高さが0を過ぎたときに計算をやめる、という意味です。なので、例えばもっと下まで計算させたいのであれば、この文をコメントアウトすることで10秒間の時間発展を計算させることが可能です。
他にも分からない事があればお答えするのでまたご質問ください。