数理科学的研究
移動速度と重量の関係
追記1
DebugHUDのmodが出たため、この第1テーマについては別の検証を行う予定です。以下の内容はアーカイブとして参考未満に捉えてください。
仮説1
重量に応じた移動速度をプロットしたグラフは、スタミナが切れる前に測定する限り、一定の曲線あるいは直線によって表せる
検証法1
コマンド open Ministry?Scenario=Scenario_Ministry_Ambush によりローカルゲーム・ロビーを呼び出す。ここで、任意の重量のロードアウトを作成し、補給箱あるいはコマンド ResupplyNow を用いて重量を指定し、スタミナが十分に戻った頃合いを見計らい、平面のある裏路地を用いて、目標地点Aまで40mを直線移動できる場所を走らせる。これらを録画し、目標地点までの距離が90mから89mに変わった瞬間から、60mから59mに変わった瞬間までのフレーム数を秒数に変換し、30mの移動時間を測定する。
測定結果
重量 | 30m移動時間 | 秒速 | 比率 (4.91s基準) | 比率 (5.28s基準) |
02% | 4.91s | 6.1099...m/s | 1.0 | 0.929924... |
20% | 5.15s | 5.8252...m/s | 1.048879... | 0.975378... |
40% | 5.28s | 5.6818...m/s | 1.075356... | 1.0 |
80% | 5.65s | 5.3097...m/s | 1.150712... | 1.070075... |
考察1
正直に言うと、データ数が少ないのは高をくくっていたのと早朝になんとなく着手してしまったためであるが、とはいえグラフ表示した場合におよそ指数関数的な単調減少を示すことが確認できた。データ数をより細かくとることでそのグラフの数式を精確に再構築可能であると思われる。
無論、手作業での測定であるゆえ、スプリント入力から速度が最大に達するまでのタイムラグ等、考慮すべき要素は多数存在することは言うに及ばず、あくまでも先駆的な検証であるゆえに、その精確さについては現時点では実用レベルであったとしても研究レベルには程遠い。
さて、装備品の表示重量は小数点以下を切り上げているため、より細かくデータをとる際には、同一重量の異なる装備での検証が必要になると思われる。
また、現時点では検証されていないが、アンダーバレルおよびロケットランチャー類の予備弾薬が重量に加算されているかどうか不明であるため、それらによっては検証結果が異なるものになるかもしれない。
さらには、Mutators=FastMovementあるいはSlowMovementやHardcore等によって移動速度が変化した場合、どのように処理されているのかも気になるところである。これらについても検証を進め、0.01秒を競うことができるプラットフォームの確立を……したいかどうかはともかく、検証自体は続けていきたい。
無論、手作業での測定であるゆえ、スプリント入力から速度が最大に達するまでのタイムラグ等、考慮すべき要素は多数存在することは言うに及ばず、あくまでも先駆的な検証であるゆえに、その精確さについては現時点では実用レベルであったとしても研究レベルには程遠い。
さて、装備品の表示重量は小数点以下を切り上げているため、より細かくデータをとる際には、同一重量の異なる装備での検証が必要になると思われる。
また、現時点では検証されていないが、アンダーバレルおよびロケットランチャー類の予備弾薬が重量に加算されているかどうか不明であるため、それらによっては検証結果が異なるものになるかもしれない。
さらには、Mutators=FastMovementあるいはSlowMovementやHardcore等によって移動速度が変化した場合、どのように処理されているのかも気になるところである。これらについても検証を進め、0.01秒を競うことができるプラットフォームの確立を……したいかどうかはともかく、検証自体は続けていきたい。
今後の懸案
- データの数もっと欲しい。4件じゃR2値をとれん。
- スタミナ残量次第でかわりそう。
進捗(2024.09.19)
コミュニティーメンバーPeglegswansoon氏により、こまけぇデータをゲーム内で見られるmodがリリースされましたの巻。そのmodはこちら。使い方についてはMOD導入方法の追加ルール(Mutators)参考のこと。
……どうやら1発1発の弾薬ごとに重量が設定されているらしく、クッソ計算困難なものの、逆に言えばこのmodと内部データを参照すればだいたいわかりそう。
なのでそのうち気が向いたら続きやる。
なのでそのうち気が向いたら続きやる。
弾丸とダメージ量の関係
仮説1
弾丸のダメージ量を決定する要素は、弾丸固有の重量mと、弾丸の着弾時の速度vを用いて定量化可能である。
懸案事項
...
Insurgency Stats and Damageによると……武器ごとにダメージ量・貫通力が決まっているわけではなく、弾丸ごとにスペックが異なる。減衰するのは弾速のみで、その弾速がダメージ・貫通の計算時の因数となっている。
弾薬参照。
SCAR-H 7.62x51mm / Mk 17 Mod 0?[未]のスペックでは
弾薬参照。
SCAR-H 7.62x51mm / Mk 17 Mod 0?[未]のスペックでは
採用弾薬 | 7.62x51mm NATO弾 |
銃口初速 | 71,500 cm/s |
ダメージ係数 | 最小値:10 最大値:130 |
ダメージ減衰率 | 最小値:5,000 最大値:100,000 |
貫通力係数 | 最小値:50 最大値:500 |
貫通力減衰率 | 最小値:5,000 最大値:100,000 |
弾速係数 | 最小値:0 最大値:150,000 |
弾速減衰率 | 最小値:5,000 最大値:100,000 |
で、計算方法なんだが……計算は1/60秒、つまりCPU処理上の1フレームごとに行われる。以下数式フォームを使用したいがシステム上の都合で省略、また近似値に対しても等号を用いる等、数理的な不正確さについてはご容赦。なお、有効数字は3桁以上、以上というのはつまり、計算後に整数値であれば整数部分がすべて保存されるが、小数値は有効数字3桁までは保存されるが残りは都度切り捨てとなるためである。
第1フレーム
- 弾丸速度: V1=71500cm/s
- この値がかなり重要になり、フレームごとに異なる値をとる。
- 線形補間値: (このフレームの弾丸速度 - 減速カーブタイム最小値) ÷ (減速カーブタイムの最大値-減速カーブタイム最小値)
- = (71500 - 5000) ÷ (100000-5000)
- = 0.700
- 補間値とはつまり、時点Aと時点Bの間におきることを計算するための変化量のこと、と考えればよい。何度も計算する面倒な手順なのでさきに計算してメモリに残しておくことで、その都度計算する手間を省く目的でここに計算されているようだ。
- 弾丸貫通力: 分岐します。まぁ特殊な状況を除き実質一定値なんだが……。
- 分岐条件: (貫通カーブ最大値 - 貫通カーブ最小値) ÷ (貫通カーブタイム最大値 - 貫通カーブタイム最小値) × (このフレームの弾速値 - 貫通カーブタイム最小値) + 貫通カーブ最小値 が、貫通カーブ最大値よりも…
- 大きい場合: 貫通カーブ最大値が、このフレームの貫通力となる。
- 小さい場合(基本こっち): ……分岐条件の式 (に、弾丸属性:徹甲弾は1.5、通常弾は1.0、例外有) を乗算した値が、このフレームの貫通力となる。
- SCAR-Hの第1フレームでは: (500 - 50) ÷ (100000 - 5000) × (71500 - 5000) + 50
- =(450)÷(95000)×(66500)+50=365 が、貫通カーブ最大値の500よりも…小さい!
- =365.00 がこのフレームの貫通力となる。(徹甲弾の場合これが1.5倍となる。WelrodのAPなら5倍になる。)
- 以後、上記「弾速」部分の数値のみが変化していく。つまり、貫通力は弾速を変数にもつ一次関数だったりするのだ。
- ※弾速
だけ が変数、ではあるが、その弾速が距離をつかさどるので、距離と貫通力のグラフをとると曲線を描く。
- 分岐条件: (貫通カーブ最大値 - 貫通カーブ最小値) ÷ (貫通カーブタイム最大値 - 貫通カーブタイム最小値) × (このフレームの弾速値 - 貫通カーブタイム最小値) + 貫通カーブ最小値 が、貫通カーブ最大値よりも…
- 弾丸減速率(次フレームまでの負の加速度): 減速カーブ最小値 + このフレームの線形補間値 × (減速カーブ最大値 - 減速カーブ最小値)
- 0 + 0.700 × (150000 - 0)
- =105000 (cm/s^2)
- ※この値は実際には負の数として機能する、つまり先程の弾速 71500cm/sから、1フレーム後に計算される弾速 71500 - 105000×1/60 cm/s = に変化するということ。詳しくは次のフレームにて。
では、これらの値は、どの距離で適用されるのか。
- 適用距離範囲: 現時点の弾速 × 1/60
- =71500 × 1/60 = 1191.667... = 1191.67cm
- 適用される「距離の全長」が1191.67cmであって、適用の距離は0cm(銃口)から1191.67cmである。
- 次のフレームでは1191.68cmから、となる。
- つまり?
- 弾速がはじめに計算される
- →補間値(計算用の値)が弾速から導かれる
- →補間値と前フレームから、弾速減衰率、貫通減衰率、ダメージ減衰率、を計算する。
- つぎのフレームが計算開始、前回弾速と弾速減衰率から、今フレームの弾速が計算される
- 以下くりかえし
- 弾速がはじめに計算される
第2フレーム: 前フレームから値が変化したものは太字で示します。
- 弾丸速度: 前フレームの弾速 - 前フレームの弾丸減速率×1/60
- = 71500 - 105000×1/60
- = V2=69750cm
- 線形補間値: (このフレームの弾丸速度 - 減速カーブタイム最小値) ÷ (減速カーブタイムの最大値-減速カーブタイム最小値)
- = (69750 - 5000) ÷ (100000-5000)
- = 0.682
- 弾丸貫通力
- 分岐条件: (貫通カーブ最大値 - 貫通カーブ最小値) ÷ (貫通カーブタイム最大値 - 貫通カーブタイム最小値) × (このフレームの弾速値 - 貫通カーブタイム最小値) + 貫通カーブ最小値 が、貫通カーブ最大値よりも…
- SCAR-Hの第1フレームでは: (500 - 50) ÷ (100000 - 5000) × (69750 - 5000) + 50
- =(450)÷(95000)×(64750)+50=356.710526... が、500よりも…小さい!
- =356.71 がこのフレームの貫通力。
- 弾丸減速率(次フレームまでの負の加速度): 減速カーブ最小値 + このフレームの線形補間値 × (減速カーブ最大値 - 減速カーブ最小値)
- 0 + 0.682 × (150000 - 0)
- =102237(cm/s^2)
- 適用距離範囲: 現時点の弾速 × 1/60
- =69750 × 1/60 = 1162.500... = 1162.50cm
- 適用の距離は1191.68cmから、1191.68+1162.50=2354.18cmまで、となる。
……らしい。これを検証・活用する方法を現在懸案中。また、仮説1に関連し、弾丸ごとに設定可能な先のテーブル(最大値・最小値)によって、実質的には弾丸の「重量」(弾速に対してえられるダメージ量などの係数)を計算可能ではあるというか既に式は判明しているので……その辺もぜんぶ定量的な式ができるはずなんだが、ここまで書いて今日のぶんの気力が尽きた……。