同様のタイプのシミュレーションに関する論文へのリンクがある投稿は次のとおりです(ゲームではなくエンジニアリング/アカデミックコンテキスト):https : //gamedev.stackexchange.com/a/10350/6398
この種の「ワイヤ」シミュレーション(ゲームの河原海原で見られるように)の衝突検出+応答に、少なくとも2つの異なるアプローチを試しました。少なくとも、これはあなたが望んでいることだと思います-この種のシミュレーションには特定の用語はないようです。私はそれを「ロープ」ではなく「ワイヤー」と呼ぶ傾向があります。 「ロープ」は「粒子の鎖」と同義であると考えてください。そして、忍者のロープのような棒のような動作が必要な場合(つまり、押したり引いたりすることができます)、これはロープというよりも硬いワイヤーのようなものです。とにかく..
Pekujaの答えは良いです。3点の符号付き領域が0である時間を解くことにより、連続衝突検出を実装できます。
(OTOHを完全に思い出すことはできませんが、次のようにアプローチすることができます:ポイントaがb、cを通過する行に含まれる時間tを見つけます(dot(ab、cb)= t)の値を見つけるために0で、有効な時間0 <= t <1が与えられると、セグメントbc上のaのパラメトリック位置sを見つけます。つまり、a =(1-s)b + s cであり、aがbおよびc(つまり、0 <= s <= 1の場合)は有効な衝突です。
AFAICRは、他の方法でアプローチすることもできます(つまり、sを解いてからプラグインしてtを見つけます)が、直感的ではありません。(これが意味をなさない場合は申し訳ありません。メモを掘り下げる時間がなく、数年前です!)
したがって、イベントが発生するすべての時間を計算できるようになりました(つまり、ロープノードを挿入または削除する必要があります)。最も早いイベントを処理(ノードを挿入または削除)し、t = 0とt = 1の間にイベントがなくなるまで繰り返し/繰り返します。
このアプローチに関する1つの警告:ロープがラップできるオブジェクトが動的である場合(特に、それらをシミュレートする場合、およびロープへの影響、およびその逆)、それらのオブジェクトがそれぞれをクリップ/通過する場合、問題が発生する可能性がありますその他-ワイヤが絡まる可能性があります。また、box2dスタイルの物理シミュレーションでは、この種の相互作用/動き(オブジェクトの角が互いにすり抜ける)を防ぐことは間違いなく困難です。そのコンテキストでは、オブジェクト間のわずかな貫通は正常な動作です。
(少なくとも..これは、「wire」の実装の1つに問題がありました。)
はるかに安定しているが、特定の条件で一部の衝突を見逃す別のソリューションは、静的テストを使用することです(つまり、時間による順序付けを気にせず、衝突の各セグメントを見つけたときに再帰的に細分化するだけです)。はるかに堅牢です-ワイヤが角で絡まることはなく、少量の貫通は問題ありません。
Pekujaのアプローチはこれにも有効だと思いますが、別のアプローチもあります。私が使用したアプローチの1つは、補助衝突データを追加することです。世界の各凸頂点v(つまり、ロープが巻き付けることができる形状の角)で、有向線セグメントuvを形成する点uを追加します。ポイント「角の内側」(すなわち、世界の「背後」v; uを計算するために、補間された法線に沿ってvから内側に光線を投じ、vの後または光線が世界のエッジと交差する前に距離を止め、または、視覚ツール/レベルエディタを使用して、手動でセグメントをワールドにペイントすることもできます)。
とにかく、これで一連の「コーナーラインセグメント」UVができました。各UV、およびワイヤ内の各セグメントabについて、abとuvが交差するかどうかを確認します(静的、ブールのlineseg-lineseg交差点クエリ)。その場合、再帰(ラインセグメントabをavとvbに分割、つまりvを挿入)、ロープがvで曲がる方向を記録します。次に、ワイヤの隣接するラインセグメントab、bcの各ペアについて、bの現在の曲げ方向をテストしますbが生成されたときと同じです(これらの「曲げ方向」テストはすべて、署名された領域のテストです)。そうでない場合は、2つのセグメントをacにマージします(つまり、bを削除します)。
または、私は忘れてしまったかもしれませんが、マージしてから分割しますが、2つの可能な順序の少なくとも1つで確実に機能します!:)
現在のフレームに対して計算されたすべてのワイヤセグメントが与えられると、2つのワイヤエンドポイント間の距離の制約をシミュレートできます(内部ポイント、つまりワイヤとワールド間の接触ポイントを含めることもできますが、それはもう少し複雑です) )。
とにかく、うまくいけば、これが何らかの役に立つことになるでしょう...私がリンクした投稿の論文もあなたにいくつかのアイデアを与えるべきです。