私は、90度未満の角度で同じ方向に衝突する場合を除いて、一般的に動作する衝突するボールを備えたシステムを持っています。ボールの衝突の問題
上記ボールはおそらく衝突面であるが、それは間違った方向から外れ、それを送信し、それが他のボールを「次の」黄色の線に衝突しようとするためです。衝突のための一般的なアルゴリズムは、次のとおり
衝突面に垂直であり、表面法線に垂直な部分が変更されていない表面法線に平行な方向の成分を否定dot = direction.surface;
parallel = surface * dot;
perpendicular = direction - parallel;
direction = perpendicular - parallel;
。
誰にもこの問題の修正がありますか?私は何か間違ったことをした?
編集:だから今、私はコメントを追加しました:
average = (ball1.velocity + ball2.velocity)/2;
ball1.velocity -= average;
ball2.velocity -= average;
を上記の計算を行う前に、その後:
ball1.velocity += average;
ball2.velocity += average;
右基準フレームで取得するには、@ベータ版の回答によると。問題は今、ボールのスピードが維持されないことです。なぜなら、スピードと質量が同じで、衝突後にボールが異なるからです。私はこれが起こるはずだとは思わないか、それとも?
このメソッドは、モーメント中心のフレームで使用するためのものです。それは物事を明確にするか、もっと説明すべきか? – Beta
少し説明してもらえますか?このメソッドを使用するオンラインでは非常に多くの例がありますが、それは必ずしも機能しません。 – slartibartfast
長い説明です。参照フレームを変更するという考え方に精通していますか? – Beta