• 締切済み

剛体の衝突とその後の移動に関する計算

2次元、3次元において物体(剛体)があり、力を受けて平行移動とか回転しながら移動するような場合、複数の物体が衝突するという運動をどのように計算するのでしょうか。物体の情報はそれを構成する点の情報があるということです。構成点があり、重心が分かっていれば、移動は回転と並進なので計算することは可能ですが、その後でそれらが衝突する、ということです。ゲームプログラミングなどが一番得意な処理なのではないかと思いますが。衝突して回転する場合、回転中心がどこかということもあります。線と点、点と面、面と線の関係について処理するサブルーチン群などを使うのだろうと思いますが。包括的な質問になるので、とっかかりとか方向性がわかるような解説でも有難いのですが。よろしくお願いします。

みんなの回答

  • ddtddtddt
  • ベストアンサー率56% (179/319)
回答No.2

 運動物体の回転中心は任意の位置にとれる事が証明でき、回転中心をどこにとっても結果として得られる運動は同じになりますが、最も一般的に便利なやり方は物体の運動を、重心の並進運動と、重心回りの回転運動に分解するやり方です。  物体の接触については弾性体なら、ヘルツの接触力公式などが昔から知られていますが、剛体なら弾性もクソもないので、普通は(プログラミング的には)、ペナルティー関数法を使います。これは物体(剛体)内部だけに、重心からの距離に依存する非常に強力な斥力を仮定するのと同じです。  で問題は、2つの物体が接触しないか、ちょうど接触するか、それともめり込むかの判定です。プログラム的には、この判定アルゴリズムが一番やっかいです(^^;)。  興味があれば、不連続変形法などでググってみて下さい。

skmsk1941093
質問者

お礼

回答ありがとうございます。今のところ、1つの剛体だけが外力を受けながら、並進と回転によって移動していく計算のプログラムは作りました(体操選手が空中回転している風)。2次元では剛体の表面に作用する力を足し合わせてX,Y方向の力として、重心に作用させて移動する、回転は重心周りのトルクと慣性モーメントから角加速度、角速度、回転角を求める。そして剛体の表面を構成している点と重心を並進と回転の和として表現することです。プログラミングが複雑になりますが、コンセプトはそれだけだと思います。ところがそのようにして運動する剛体が複数個あると接触することになるのですが、その接触点で引っ掛かって接触点周りの回転運動になる場合があるわけですね。体操選手の体が何か触れているような状態で例えば床の演技で足を蹴って体が舞い上がって回転して手をついて(床に接触)また回転するときに、一瞬床を中心とした回転に見えるわけです。鉄棒の大車輪もそうですね。鉄棒周りの回転です。回転中心が重心であったり別の点であったりするようなことをどう表現するかなのですが。というところなのですが、不連続変形法を拝見したらなるほど、これか!と思いました。この方法は確立されたものでしょうか。面倒な処理までオートマチックにやってくれるのかなと思うのですが。ペナルティ―関数という言葉は有限要素法とかラグランジュの未定定数法とかを想起してしまいますが。接触したら(剛体内部に侵入)斥力で戻すということですかね。フェイクということになるでしょうか。あり得なことが起こったのだからあり得ない方法で修復するというような。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.1

https://physics-htfi.github.io/ 物理学になりますねっ ><  参考程度まで、こんなHPありますが・・・ 取っ掛かりに、なりますでしょうか?

参考URL:
https://physics-htfi.github.io/
skmsk1941093
質問者

お礼

回答ありがとうございます。参考にさせていただきます。ところでその物理なのですが、初等的な物理は完全弾性衝突とかの導入の仮定は質点(基本は大きさや形がない点ですが、拡大して解釈するとしたら球や円)ですね。しかし、実際の問題は個別の事情に応じた形を持っており、物理の理論をどこまでも厳密に適用することは困難のように思います。剛体という仮想的な対象を設けるところもそうですね。そのため何らかのフェイクとか偽装とかズルを導入していくしかないのではないかと思います。物体を有限個の球で近似し、球の衝突(中心間の距離が半径の和より小さい状態)として表現するとかです。物理の教科書が物理をこっそり裏切る方法を説明してくれるとはあまり考えにくいのですが。"物理はさておき、実際は..."という前置きの元になされるものだからです。例えば、剛体の衝突は剛体の表面を構成する点が別の剛体の構成点が与える内部領域に含まれた状況であり、実際にはあり得ないことが起こったわけでそうならないように物体を押し返す処理とか、その押し返した方向に反発力を発生させる(ここはやや物理の手助けを受けるが)ようにモデル化するとかです。モデル化とは理想的な対象に与えられた原理原則を守りたいのだけどやむなくやや修正する(ズルをする)ということになるのではないでしょうか。どうでしょうか。