3

開始座標と終了座標を指定して、線が図形と交差するかどうかを確認するために使用できるJavaAPIのクラスはありますか。Line2Dオブジェクトを試してみましたが、そのクラスのintersects()関数は、長方形の座標とRectangle2Dオブジェクトしか取り込めないようです。これは、シェイプに任意の数の辺を含めることができるため、私の目的には適していません。

4

3 に答える 3

3

@Danが言ったように、線がの境界と交差するかどうかを確認できますPolygonが、からの任意の2点によって作成されたすべての線と交差するかどうかを確認する必要はありません。Polygonのように、線と2点のすべてのペアとの交差を確認する必要があります(p1,p2), (p2,p3), ... , (p(N-1), pN), (pN, p1)。ポリゴンは、配列内のすべての点の組み合わせから作成されるのではなく、p1からp2までの線から、p2からp3までの線に接続され、pNからp1までの線まで接続されます。

ここにいくつかの例:

Line2D myLine = getMyLine() // some imagine method giving your line
Point2D[] polyPoints = getPolyPoints() // some imagine method giving point of your Polygon

boolean intersect = false;
for (int i = 0; i < polyPoints.length - 1; i++) {
   intersect = myLine.intersectsLine(polyPoints[i].getX(), polyPoints[i].getY(), polyPoints[i+1].getX(), polyPoints[i+1].getY());
   if (intersect) {
      break;
   }
}
if (!intersect) {
   intersect = myLine.intersectsLine(polyPoints[polyPoints.length - 1].getX(), polyPoints[polyPoints.length - 1].getY(), polyPoints[0].getX(), polyPoints[0].getY());
}

内部でこのコードを実行intersectすると、線がポリゴンと交差するかどうかに値があります。

Polygonに線を含めることができ、それでも線(パスとして)がポリゴンと交差することを意味する状況を受け入れる場合はPolygon、ポイント(頂点)からJavaインスタンスを作成し、次を呼び出します。

if (!intersect) {
   intersect = myPolygon.contains(myLine.getP1()) || myPolygon.contains(myLine.getP2());
}
于 2013-02-01T18:33:34.657 に答える
1

線が図形の任意の2点で指定された線と交差するかどうかを確認できます。したがって、シェイプポイントを反復処理し、2ポイントの任意の組み合わせのラインを作成します。これらの線分のいずれかが、線が形状と交差するよりも線と交差する場合。

于 2013-02-01T18:10:13.060 に答える
0

Polygonオブジェクトはあなたが使いたいもののように聞こえますが、そのメソッドintersectsは長方形のオブジェクトの何らかの形(寸法のあるコーナー座標またはRectangle2Dオブジェクト)のみを取ります。...を受け入れるメソッドを拡張Polygonして追加するか、これをDanが投稿した回答と組み合わせる必要がある場合があります。intersectsLine2D

于 2013-02-01T18:12:23.000 に答える