忍者ブログ

work memo

偏差射撃について_02

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

偏差射撃について_02

さっきの偏差射撃の値のロジックについて
まだ正しいかも確かめていないけど、覚えているうちに書く

ところでsqrt()は重いって聞いたけど、これTick()毎に実行して大丈夫かな

基本ベクトルは考えず、距離を考える

基本的に大文字はベクトル、小文字はスカラ
また、a = |A|
と表記(ベクトルの長さを小文字で表現)

半径が時間に比例する2つの円を考える
片方の円をC1, 半径r1 = st, 中心O(原点),
もう片方をC2, 半径r2 = vt, 中心L
とする

円の位置と半径の値がいい感じだと、2つの円の交点が2つできる
これをP, Qとし、直線LOとPQの交点をXとする

このP, Qっていうのは、
「Oから速度s、Lから速度vの弾が発射され、それらが時間tのときに衝突するとしたらこの位置」
っていう点

次に、自機のパラメータを
位置O, 弾速s
敵のパラメータを
位置L, 速度V
Vと直線LOのなす角をθ
とし、さっきの円と同じように考える
(r1 = st, r2 = vt)

弾が敵に当たる場合、点P(またはQ)は敵の移動経路上(L+V*k )にある必要がある(kは正の実数)
このとき、三平方の定理から考えて

    |PX| =
        √( r1^2 - |OX|^2 ) = √( r2^2 - |LX|^2 )

となる

自機から発射された速度sの弾が時間tに敵に当たるとすると
r1 = st, r2 = vt, |LX| = vtcos(θ)となり

    √( (st)^2 - |OX|^2 ) = √( (vt)^2 - (vtcos(θ))^2 )

となる

|OX|のとる値は3パターンある

|OX|
    = l - |LX| ( θ <= 90 && l >= |LX| , OXLがこの順で直線状に並ぶ)
    = |LX| - l ( θ <= 90 && l < |LX| , XOLがこの順で直線状に並ぶ)
    = l + |LX| ( θ > 90 , OLXがこの順で直線状に並ぶ)

よって
|OX|^2
    = ( l - |LX| )^2 ( θ <= 90 )
    = ( l + |LX| )^2 ( θ > 90 )

これをtについて解くと

θ <= 90°のとき、
t = (lvcos(θ) ± l√(v^2(cos^2(θ)-1) + s^2)) / (v^2 - s^2)

θ > 90°のとき、
t = (-lvcos(θ) ± l√(v^2(cos^2(θ)-1) + s^2)) / (v^2 - s^2)

となる
PR

コメント

プロフィール

HN:
No Name Ninja
性別:
非公開

P R