問題タブ [separating-axis-theorem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
20 に答える
97621 参照

algorithm - 2つの長方形の交点を検出するアルゴリズム?

2 つの長方形が交差しているかどうかを検出するアルゴリズムを探しています (1 つは任意の角度、もう 1 つは垂直/水平線のみ)。

一方のコーナーが他方の ALMOST にあるかどうかのテストは機能します。長方形が十字のような形状を形成する場合、失敗します。

垂直線に特殊なケースが必要になるため、線の傾斜を使用しないようにすることをお勧めします。

0 投票する
1 に答える
1711 参照

ios - 回転したUIViewのサブビューが交差するかどうかをObjective-Cでチェックしますか?

どこから始めればいいのかわからない。この場合、明らかCGRectIntersectsRectに機能しません。理由がわかります。

UIView の正確な中央に配置された UIImageView を持つ UIView のサブクラスがあります。

回転前のUIView

次に、CGAffineRotation を実行しながら、カスタム UIView を回転させて、内側の UIImageView のフレームを維持します。結果のフレームは次のようになります。

回転後のUIView

ユーザーがこれらのUIImageViewを交差させないようにする必要がありますが、フレームが親UIViewに適用されないだけでなく、フレームに影響を与えずに回転されるため、2つのUIImageViewの交差を確認する方法がわかりません。

私の試みの唯一の結果は失敗に終わりました。

何か案は?

0 投票する
1 に答える
230 参照

collision-detection - 分離軸定理アルゴリズムが機能しない

Haxe を使用して、次のガイドに基づいて分離軸の実装を作成します。個々のパーツをテストして動作しない理由を理解できないようですが、衝突がない場合でも、衝突に対しては常に true を返します。

どんな助けでも大歓迎です!:D

0 投票する
1 に答える
446 参照

c++ - 分離軸の定理: 重心の周りの回転

問題は次のPolygon::FindAxisLeastPenetrationとおりです。

}

polygon.rotationMatrixMatrix222x2 行列である型のオブジェクトです。
polygon.pointsベクトルでstd::vector<Vector2D>満たされています。インスタンス
polygon.bodyへのポインタです。Objectこの場合、位置を取得するためにのみ使用されます。と座標
polygon.body->positionのインスタンスです。ボディの位置ベクトルを返します。Vector2DXY
Vector2D polygon.body->GetPosition()

ポイントを中心に回転が行われることを除いて、正常に機能します[0, 0]が、重心の周りを回転するはずです。

ポイントを中心とした回転は次のようにできることを知っています:

また、ポリゴンをレンダリングするときにもうまく機能します。しかし、衝突検出ではありません。

この場合、特定の点を中心にベクトルを回転させるにはどうすればよいですか?

編集:これが私がこれまでに持っているものです

今のところ、最適化についてはあまり気にしていません。同じ問題があります。中心を中心に回転すると、衝突が正しく検出されません。ただし、中心が使用されている[0, 0]か使用されていない場合、衝突検出は適切に機能しますが、回転は正しく行われません。

編集:衝突検出前に回転しても、同じ問題が発生します。これまでのところ、中心が になるようにポリゴンを変換するのが最善の方法でした[0, 0]が、角度によっては衝突が検出されませんでした。今何をすべきかわからない。

編集: スクリーンショット (重心が常に になるようにポリゴンが変換されてい[0, 0]ます。この場合、ポリゴンは長方形です) 衝突検出はここではうまく機能しませんでした ここでは衝突検出がうまく機能しませんでした

ここでも衝突検出がうまく機能しませんでした ここでも衝突検出がうまく機能しませんでした

ここでは衝突検出がうまく機能しました ここでは衝突検出がうまく機能しました

編集:Rectangleクラスを追加しました。

0 投票する
1 に答える
772 参照

python - SAT 最小平行移動ベクトルが正しくありません

SAT の最小変換ベクトルは、すべての場合において常に正確で正確ですか? 考えられるすべての軸を反復して計算し、それぞれのオーバーラップをチェックしてから、オーバーラップが最も短い軸を追跡し、それを貫通ベクトルとして使用します。

ご覧のとおり、最小平行移動ベクトルの一部の計算は常に正しいとは限りません。

この短い抜粋で、侵入ベクトルを見つけました。何が問題なのかを発見するのを手伝ってください。

他の場所では、次のコード行を使用してベクター値を取得します。

0 投票する
1 に答える
533 参照

python - 2D 衝突後の合成速度ベクトルの計算

現在、衝突の検出と応答に分離軸定理を使用するミニ物理ゲームがありますが、SAT 衝突を使用して別の形状と衝突した後にオブジェクトの速度に何が起こるかについてのドキュメントがあまりないことを発見したとき、私は立ち往生しました検出。

これが私が話していることの2つの図です。

ここに画像の説明を入力

ここに画像の説明を入力

誰かが私を正しい方向に向けることができますか?

衝突後に得られるすべての情報は、最小侵入ベクトルです。

編集:これに非常に関連するコードをオンラインで見つけましたが、理解できません:

0 投票する
0 に答える
232 参照

matlab - matlabで軸を分離する

私は、matlab で分離軸アルゴリズムの実装に取り​​組んできました。私はたくさん検索しましたが、解決策は思いつきませんでした。間違いを指摘していただけますか?前もって感謝します

0 投票する
0 に答える
101 参照

c - 2次元での凸多角形の分離

2 つの凸多角形が交差するかどうかを調べようとしています。最も効率的な方法の 1 つは、軸を分離する方法を使用することです。この本http://www.geometrictools.com/Documentation/MethodOfSeparatingAxes.pdfでいくつかのコードを見つけましたが、ちょっと混乱しています。関数 Dot は何をしますか?

0 投票する
0 に答える
435 参照

algorithm - 分離軸定理の時間計算量

ポリゴン (三角形) の数に基づいて複雑さをどのように判断しますか? ここで私のアプローチを修正または確認してください。ピラミッドがあり、頂点の追加を開始するとします。6 つの頂点から、次のようなパターンが見えます。

SAT では、オブジェクトの各頂点をそれぞれの法線に投影します。したがって、式は N*V で、N はポリゴンの数と同じです。

これは正しいです?もしそうなら、これはどのような複雑さですか?二次と線形の組み合わせと呼ぶべきですか?ありがとう。

編集:今それを見て、それは私が三角測量する方法に依存すると思います、それもあるかもしれません:

最小限かどうかはわかりませんが、複雑さは変わらないはずです。それはただの定数です。だから V*2-A かもしれません。何か公式があれば教えてください。エッジも扱うオイラーの多面体の公式を見つけました。

0 投票する
1 に答える
846 参照

javascript - 衝突検出: 分離軸定理 - 円対多角形

コードにかなり厳密に従って、 Randy Gaul の C++ Impulse Engineに基づいて円と多角形の間の衝突検出を実装しようとしましたが、アルゴリズムは決して true を返しません。

これがJSFiddleです。(便宜上、本文は HTML5 Canvas API を使用してレンダリングされます)

コードのスニペット (衝突検出のみ):

b.verts2は、現実世界の座標でのポリゴンの頂点を指すことに注意してください。

Vector クラスに問題がないことはわかっていますが、変換行列の経験があまりないため、そのクラスがこれらのエラーの原因である可能性がありますが、そのコードはほぼ完全にから派生しています。 Impulse Engine も同様に動作するはずです。前述のように、衝突が実際に発生した場合でも、アルゴリズムは常に false を返します。ここで何が間違っていますか?初期のリターンを取り出してみましたが、負の座標を持つ接触点などの奇妙な結果が返されるだけで、明らかに正しくありません。

編集: ベクトル クラスの垂直関数をインパルス エンジンと同じように動作するように変更しました (どちらの方法も正しいですが、一方は時計回りでもう一方は反時計回りだと思います。反時計回りを反映するように頂点も変更しました)。残念ながら、それでもテストに失敗します。

https://jsfiddle.net/khanfused/tv359kgL/4/