角度
参考より、空気抵抗をkとして、Unityでの空気抵抗は以下のように計算されているらしいので、
※ 引用元のfはfloatなので省略、
調査した結果、Unity上で は「Project Settings」「Time」「Fixed Timestep」であった。
物理演算は「Fixed Timestep」ごとに行われ、 回かかるものとする。
物理演算は「Fixed Timestep」ごとに行われ、
そして位置 を計測したところ、Unity上では ではなく、 から使われていた。
、
、
よって位置の一般項 は、
よって位置の一般項
速度 を計測したところ、Unity上での式は以下のようになっていた。
よって速度の一般項 は、
位置の一般項 も、
と同様に なので、
初項 、公比 の等比数列の和より、
ここから距離を求めたいので、 から、 となる を求める。
※Unityで確認したところ、 の場合は空気抵抗が釣り合ってしまい、ボールが動かなかったので、 とする
※Unityで確認したところ、
よって、
これを解けば飛距離 をだせるが、どうやらこの式は解けないようなので、近似値を求めることにした。
既存のライブラリ
で対処したかったが、式のグラフの形が想定されていないのか、 が400ほどですでに解がだせなかったので、
禁断の自作実装で対処した。
飛距離の最低値は当然0であり、最大値は の で求められるので、
飛距離の計算を実現するクラスは以下の通り。
※2025/3/6追記 lowerBoundがupperBound/2だと解が含まれない場合があったので、0に修正
残念ながら飛距離はUnity上でも正確に測れないためか、それとも浮動小数点の計算誤差なのか、値が大きくなると精度の範囲を超えた誤差がでる。(以下の図は精度0.1を指定している)
コメント
コメントを投稿