地図/力学/エージェント

速度を持たせる

点に速度を持たせると、向きが前のフレームから引き継がれる。位置に速度を足し、速度に力を足す。二行で、動きが滑らかな弧になる。

// これが運動の全骨格
pos += vel // 位置は速度ぶん進む
vel += accel // 速度は力(加速度)ぶん変わる

前進オイラー法。位置を速度で、速度を加速度で進める更新。微分方程式の数値積分でいちばん単純な形で、時間刻みを 1 フレームとして次の状態を一次近似する。刻みが大きいと真の軌道から誤差が積もる(跳ね返りでエネルギーが増えるなど)が、ゲームやアニメの見た目には足りる。エネルギーを保ちたい物理では、速度を先に更新してから位置に使うセミインプリシットオイラー法が安定する。

accel に重力 g を入れ、壁で速度の符号を反転させると、落下して跳ね返る点になる。

重力は vy に毎フレーム足し続けるだけ。横速度 vx は触らないので一定で、合わさると放物線を描く。壁にぶつかると、めり込んだぶんを押し戻してその軸の速度を反転し、少し弱める。0.9 が反発係数で、1 にすると同じ高さまで跳ね返り続け、小さくするとすぐ転がって止まる。

nbody は同じ pos += vel; vel += accelaccel を、全ての点どうしの引力で作っている。力の出どころを壁と重力からお互いの距離に替えると、点は軌道を描いて絡み合う。