物理シミュレート部分を試しにつくった

ベクトル反射どころじゃねー
そう。とあるアニメのキャラクターにアクセラレーター(一方通行)というキャラクターがいるが、まさにそいつを想像するような現象が発生。

何が起きたかというと、以下の通り。
試しに、原子間の万有引力だけ実装した。二つの原子だけ放置して、たがいが引き合い、くっつきはしないが、いったりきたりーというのを予測していた。
プログラムでは、X軸上に物体を直線的に配置しシミュレートを行った。(Y,Z軸の方向ベクトルは0)
以下は時間に対するX軸の位置座標の変化である。

ただ、離散時間でシミュレートしたため、物体同士が限りなく近づいた瞬間に物体がぶっ飛んでったのだ。怖い怖い。
それで、触れた物のあらゆるベクトルを操作できる某キャラに似てね?というおはなし。


表は実験データ。csvで出力したが、結果が150MBぐらいあって、この部分をさがすのに非常に苦労した。色で示されている値。物体同士が限りなく近づいた瞬間の時の加速度。前が2桁にたいしていきなり4桁。
どうりでぶっとんでいくわけだ。うひょひょ。

自分なりの考察。
原子間の力として組み込んだのは万有引力の法則。F=GMm/r^2という式。この式通りに物体を運動させた。
この式を物体に適用するには、時間領域で考える必要性がある。
連続で物体をシミュレートすることは不可能だ。理想としては物体運動の計算は回数が多ければ多いほど厳密が動きが再現できる。理想は、計算回数無限回。物体を計算して、また次の物体の計算にうつるのに無限分の一秒。微分的な考え方で0秒。ただし、こんなことは不可能である。そのため、ある程度離散時間でシミュレートしなければならない。例えば、0.0001秒おきだとか。
F=GMm/r^2という式を見ればわかると思うが、物体が近づくにつれてrの値が小さくなる。rはニ乗がかもされているんで、分母はかなり小さくなる。すると、計算結果は莫大な値となる。が、相対距離がマイナスに突入した瞬間(原子通り過ぎた)、相対距離は符号が変わっても十分小さいので、負の莫大な値となるので相殺される。
まぁ現実世界で働く力は、万有引力だけじゃないから一概にいうことはできないが、万有引力だけしか存在しない"現実世界"だったらおそらくこうなる。

加速度を物体の運動に適用すると、結果的に加速度が大きくなると位置座標も大きく変化する。そのため、実は原子を通り過ぎてしまう。"通り過ぎる"のではなく、"座標"が移動し、スキップしてしまうため、その間の力は受けない。何故なら、離散的な位置座標しかとりえないから。本来ならば、負の方向の力で引っ張られて戻ってくるはずなのだが、恐ろしいスピードで飛んでいくため大きな負の力が働かない。働いているが全然桁が違う。通りすぎていくと、もちろん働く力も小さくなってくる。もどってこねー・・・というわけ。

どうやって解決しようか。やっぱり完全な原子運動のシミュレートは不可能なのだろうか?もしかして、この世界はそうやって作られてたりする?