あなたの近似は基本的にショットが球の表面の一部に着陸することを指示し、角度によって決定されます。そのサーフェス内のターゲット領域は定数です。確率分布は表面内で一定で、他の場所ではゼロです。
Gajetは、これらの仮定のいくつかがフラットになる理由をいくつかの正当な理由ですでに示していますが、同じ不正確なモデルである角度の限界エラーを保持しています。結果はまだr ^ -2で落ちますが、小さな定数です。
シューターの最大広がりが5°だとします。彼は0度から1度の誤差で発砲する可能性がありますが、4度から5度の間のリングの面積は0度から1度の間のリング/円の面積よりもはるかに大きいです。エラーが大きいほど、発生する可能性が高くなります。誤差をさらに大きくすると、5度の制限を超えているため、確率が突然ゼロに下がります。それはあまり現実的ではないようです。
より正確な表現は、角度誤差のガウス分布を持つことですA(ϕ) = sqrt(a/π) exp(-a ϕ²)
。変数aを使用して、シューティングゲームのスキルなどを含めることができます。このソリューションは1次元であることに注意してください。ターゲットがその幅に比べて非常に背が高い場合は、垂直方向の誤差を完全に省略して、ショットが正しい標高で着地したと見なすことができます。または、ターゲットがほぼ長方形であると想定して、計算を2回実行して結果を乗算することもできます。
確率関数からターゲットに命中する実際の確率を得るには、関数Aを統合し、高価なエラー関数を作成しますp(ϕ) = erf(ϕ sqrt(a))
。これは、実際にはエラー関数と呼ばれます。角度は、ターゲットポイントとターゲットのエッジ間の角度に相当します。目標サイズSとの距離rの点で:p(r) = erf(arctan(s/2r) sqrt(a))
。この機能は、1と精度値の大きさのターゲットの下にプロットされているa=2
とa=10
。

r ^ -2のフォールオフとは異なり、ターゲットがどの程度近くても、確率は1未満にきちんと留まっていることに注意してください。実際、誤差が90°を超える可能性が非常に低いため、正確にゼロの距離にあるターゲットであっても見逃される可能性があります。
前に言ったように、エラー関数はかなり高価ですが、その引数はϕ sqrt(a)
、賢明なシューティングゲームのシナリオではそれほど変わりません。代わりにテイラー級数の一部を評価し、その結果に上限を設けることで、はるかに良い結果を得ることができます。まず、をマップしてからx = arctan(s/2r) sqrt(a)
、次を評価します2 x - (2/3) x^3 + (1/5) x^5 ...
。必要と思われる数の用語を省略または追加してください。ただし、用語の数が偶数になると、距離が短いと望ましくない動作が発生することに注意してください。以下にプロットされているのは、そのテイラー級数の最初の3つの非ゼロ項と比較した実際の誤差関数です。

最後に、これは純粋に数学です。いくつかの正弦関数、ランダム係数、対数を投入すれば、ゲームも同様に楽しいかもしれません。