AIと作る弾道シミュレータ
このページは作業中
環境
Claude Code
JavaScript
HTML5 + Canvas
モチベーション
狩猟は主に大物猟でスラッグ弾を使っている
サボットスラッグが高いのでハンドロードを始める(予定)
弾速、弾の形状、面積で弾道が変わる→ドロップが変わる→弾道計算したくなる
自分で作るのは大変…そうだ、AIにやらせよう!コンピュータの原点回帰
実装仕様
日本語インターフェース
ブラウザアプリ(ネットワーク接続不要)
シンプルなUIと設定パラメタ
作ってる人の仕様
高卒(普通科)
コンピュータとネットワークは好きだけど数学は苦手
質量、重力、空気抵抗などのある程度の基礎知識はある
1stバージョン
AIにパラメタを書かせて作った
three.js https://threejs.org/ を使って3次元的に表現
UIの指示出しが大変になったので破棄
2ndバージョン(公開中のもの)
飛翔体、射出条件、環境条件の3要素に分解
このときはまだ弾道モデルの知識がない
3D表現はやめて2Dに切り替え
CSVダウンロード機能を追加
開発ワークフロー
最初期
基本仕様をmarkdown形式で記述
入力パラメタ、表現、言語、単位等
ガードレールの整備(後述の品質保証)
タスクをコンパクトにして、少ないパラメタから実装
リリース後(public化後)
Issue drivenで開発
Issueに仕様および実装方法をまとめる
Claude Codeに読み取らせて実装
テストまで完了したら、ブランチを切ってコミット&プッシュ&PR作成
人間がレビューしてマージ
品質保証
CI / CDにGitHub Actions
markdownlint, yamllintなどのlinterでスタイルを固定化
Jestによるユニットテスト
デプロイメント
Pure JavaScriptなので単一のウェブページでOK
GitHub Actions経由でGitHub Pagesにデプロイ
https://key.github.io/ballistic-js/
良いところと悪いところ
Pros
人間の知識の少ない分野でも容易に参入することが出来る
実装速度が圧倒的に高速
それっぽい見た目のものがすぐに出来上がった(結果論)
Cons
コンテキストが広くなると実装にあわせてテストを変更したり、A→B→Aと同じことを繰り返すことがある
人間側に知識がないと正確なものが作れているか不安
UI上の細かい調整が不得意
Playwrightのようなブラウザを使用すれば、認識させて修正できるはず
課題
肝心の弾道計算が正確ではなさそう
弾道モデルテーブル、演算処理を人間の目で正しく確認する必要がある
今後の予定
単位の切り替え
弾道モデルのサポート(G1, G7から)
既成装弾のプロファイル(弾速、直径、BC値)サポート
スコープハイトとスコープ仕様を加味したゼロインサポート
ランニングターゲットの見越し量推定
ライブラリ
https://github.com/o-murphy/js-ballistics
ISCライセンス
弾道モデルはG1, G2, G5, G6, G7, G8, GS, GIをサポート
スピンも考慮されている
参考
https://jbmballistics.com
弾道計算に関するさまざまなリソース
ソフトウェア
アルゴリズム
弾頭データ
https://www.hornady.com/team-hornady/ballistic-information/ballistic-resources/
Hornady(リローディング用品とか作ってる)の弾道情報ページ
弾頭に対するBC値やテーブルがあるので答え合わせに使えそう