有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查直线和矩形的交点?

书名说明了一切,我一直在四处寻找,却找不到任何直截了当的东西。我如何与点(x1,y1)和;(x2,y2)并检查矩形(xR,yR)之间的交点?我在Line2D软件包中看到了一些交集方法,但不确定如何设置。有人能告诉我一个正确的设置方法来检查交叉口(碰撞)吗


共 (2) 个答案

  1. # 1 楼答案

    如果直线不相交,则返回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;
    }
    
  2. # 2 楼答案

    使用2D Graphics API中的可用类

    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));
    

    这没有告诉你的是