在Java API中是否有一个类可以用来检查一条线段与一个形状的相交情况,给定起始和结束坐标。我已经尝试使用Line2D对象进行操作,但是该类的intersects()函数似乎只接受矩形坐标和Rectangle2D对象,这不适合我的目的,因为我的形状可能有任意数量的边。
像@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
代码后,您将得到一个值,指示您的线是否与多边形相交。
如果您接受多边形可以包含一条线,这仍意味着线(作为路径)与多边形相交的情况,则从您的点(顶点)创建Java Polygon
实例,然后只需调用:
if (!intersect) {
intersect = myPolygon.contains(myLine.getP1()) || myPolygon.contains(myLine.getP2());
}