11

タイトルはそれをすべて言います、私は周りを探していて、まっすぐで要点を見つけるものを見つけることができませんでした。点(x1、y1)と(x2、y2)の線を取り、長方形(xR、yR)間の交点を確認するにはどうすればよいですか?Line2Dパッケージで、いくつかの交差メソッドがあることがわかりましたが、すべてを設定する方法がわかりません。交差点(衝突)をチェックするための正しい設定方法を誰かに教えてもらえますか?

4

3 に答える 3

11

2DGraphicsAPIから利用可能なクラスを使用します。

Rectangle r1 = new Rectangle(100, 100, 100, 100);
Line2D l1 = new Line2D.Float(0, 200, 200, 0);
System.out.println("l1.intsects(r1) = " + l1.intersects(r1));

これが教えてくれないのは、どこにあるのか...

于 2013-03-20T04:06:32.327 に答える
4

長方形は4行です。あなたの線と長方形の4本の線の間の交点を計算することができます。

2本の線の方程式が与えられると、xとyが等しいときにそれらは交差します。

y = m1x + b1 y = m2x + b2

あなたが得るべき方程式を解く:

x = b2-b1 /(m1-m2);

m1 == m2の場合、線は平行であり、交差することはありません。この場合、0で割った値に注意してください。

次に、無限線よりもガタガタしたセグメントを扱っているので、交差がセグメント内で外れていないかどうかを確認します(XとYの両方が各セグメントの境界内にあるかどうかを確認します)。

于 2013-03-20T04:05:01.383 に答える
4

線が交差しない場合はnullを返します。同様の質問に対する別の応答からいくつかのcコードを変更して、Javaにしました。それがどのように/なぜ機能するのかをわざわざ調べたことはありませんが、私が必要としていた仕事をしています。

static Point get_line_intersection(Line2D.Double pLine1, Line2D.Double pLine2)
{
    Point
        result = null;

    double
        s1_x = pLine1.x2 - pLine1.x1,
        s1_y = pLine1.y2 - pLine1.y1,

        s2_x = pLine2.x2 - pLine2.x1,
        s2_y = pLine2.y2 - pLine2.y1,

        s = (-s1_y * (pLine1.x1 - pLine2.x1) + s1_x * (pLine1.y1 - pLine2.y1)) / (-s2_x * s1_y + s1_x * s2_y),
        t = ( s2_x * (pLine1.y1 - pLine2.y1) - s2_y * (pLine1.x1 - pLine2.x1)) / (-s2_x * s1_y + s1_x * s2_y);

    if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
    {
        // Collision detected
        result = new Point(
            (int) (pLine1.x1 + (t * s1_x)),
            (int) (pLine1.y1 + (t * s1_y)));
    }   // end if

    return result;
}
于 2013-10-13T06:16:39.990 に答える