用于检查线是否与形状相交的Java类

时间:2013-02-01 18:02:42

标签: java api line shape

在给定起始坐标和结束坐标的情况下,我可以使用Java API中的类来检查线是否与形状相交。我试过玩Line2D对象,但该类的intersects()函数似乎只采用直角坐标和Rectangle2D对象,这不符合我的目的,因为我的形状可以有任意数量的边。

3 个答案:

答案 0 :(得分:3)

就像@Dan所说,你可以检查你的线是否与Polygon的边界相交,但你不必检查与Polygon中任意两点创建的每条线相交,只需检查交叉点你的每一对像(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可以包含一条线的情况,这仍然意味着该线(作为路径)与多边形相交,那么从您的点(顶点)创建java Polygon实例并只调用:

if (!intersect) {
   intersect = myPolygon.contains(myLine.getP1()) || myPolygon.contains(myLine.getP2());
}

答案 1 :(得分:1)

您可以检查线条是否与形状中任意2个点给出的任何线条相交。因此,您迭代形状点并构建任意2点组合的线条。如果这些线段中的任何线段与您的线相交,则线条与形状相交。

答案 2 :(得分:0)

Polygon对象听起来像是您想要使用的内容,但其intersects方法只采用某种形式的矩形对象(带有维度的角坐标或Rectangle2D个对象)。您可能需要延长Polygon并添加一个intersects方法,该方法接受Line2D ...或将其与answer Dan发布的结合起来。