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