私は Android ゲームを開発しています。その位置 (x と y)、幅と高さを知っている四角形と、x、y、幅と高さを知っている三角形の衝突を検出する方法を知りたいです。三角形は、長方形を対角線で分割した結果として常に直角三角形になるため、(x,y) パラメーターは三角形の中心ではなく、斜辺の位置になります。どんな助けでも大歓迎です!
6575 次
2 に答える
6
最後に、関数 intersect を 2 行で使用してこれを行いました。線は始点 (x,y) と終点 (x,y) で定義されます
// a1 is line1 start, a2 is line1 end, b1 is line2 start, b2 is line2 end
static boolean intersects(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2)
{
Vector2 intersection = Vector2.Zero();
Vector2 b = Vector2.Subtract(a2,a1);
Vector2 d = Vector2.Subtract(b2,b1);
float bDotDPerp = b.getX() * d.getY() - b.getY() * d.getX();
// if b dot d == 0, it means the lines are parallel so have infinite intersection points
if (bDotDPerp == 0)
return false;
Vector2 c = Vector2.Subtract(b1,a1);
float t = (c.getX() * d.getY() - c.getY() * d.getX()) / bDotDPerp;
if (t < 0 || t > 1)
return false;
float u = (c.getX() * b.getY() - c.getY() * b.getX()) / bDotDPerp;
if (u < 0 || u > 1)
return false;
intersection = Vector2.Sum(a1,Vector2.Multiply(b,t));
return true;
}
三角形が長方形と交差するかどうかを知るには、三角形のすべての線と長方形のすべての線との交点を上記の関数で確認します。
于 2013-01-28T12:05:57.637 に答える
0
偉大な多角形交差ライブラリをご覧ください。Android で使用できる C++ バージョンがあります。
もう 1 つの可能性は、長方形のイメージと三角形の別のイメージをラスタライズし、最終的に 2 つのイメージ間に交差があるかどうかをピクセルごとにチェックすることです。
于 2013-01-23T13:05:47.110 に答える