私は周りを見回しましたが、探しているものが正確には見つかりませんでした。最初は、これは単純な問題だと思っていました..実装しようとするまでは、多くのケースがあり、一般的な解決策を見つけることができませんでした.
たとえば、AABB が 2 つあるとします。それらの輪郭が交差する場合、すべての交点を取得したいと考えています。ポイントの最大量は4で、ポイントのゼロ以外の最小量は1です。
私の AABB は常に自動的にソートされるmin
とポイントで構成されているため、常に最小のxy 値を持ち、常に最大のxy 値を持ちます。max
min
max
下の画像は、いくつかの AABB を示しています。青い線はそれらの交点を示しています。AABB の辺が別の辺と重なっている場合は、重なっている線分に沿って無限の交点があるようなものであることに注意してください。そういう場合は無視して「交点はない」と言いたい。
アルゴリズムのアイデアを思いついた人はいますか? 私はコードを投稿していないことを認識しており、それが眉をひそめていると確信していますが、この問題についてかなり考えました。なぜ私がこれをしたいのか..私は知りません.
そうそう、私の AABB には次のような便利なメソッドがあります。
Vector<2> getSize () const;
Point<2> getCenter () const;
//0=Quadrant-1, 1=Quadrant-2, 2=Quadrant-3, 3=Quadrant-4, else, error
Point<2> getCorner (int index) const;
//0=right, 1=up, 2=left, 3=down, else, error
LineSegment2D getSide (int index) const;
私は醜いハックを行うことができ、線分 <-> 線分チェックを行うことができましたが、私にはわかりません..ちょっと、まあ、醜くてエレガントではありません。min
これをすばやく行うには、とmax
ポイントを使用して実行できるいくつかの策略があるに違いないと確信しています。