Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找出直线与某物碰撞的位置?_Java_Line_Collision_Java 2d - Fatal编程技术网

Java 如何找出直线与某物碰撞的位置?

Java 如何找出直线与某物碰撞的位置?,java,line,collision,java-2d,Java,Line,Collision,Java 2d,我在点(xo,yo)处有一条线的原点,我有多个“墙”,它们是矩形,x和y值在左上角。这条线是为了跟随某个东西(具体来说,玩家是一个运动跟踪器),但它不应该越过墙 因此,一旦线碰到墙的任何部分,它就不会越过墙。 我知道如何使用rectangle2d.intersects判断线条是否与墙发生碰撞,但我需要知道它在何处发生碰撞,以便线条的端点就是该点。您尝试过在谷歌中搜索吗 您需要为矩形的每一侧绘制一条新线,然后检查与每一侧的碰撞。要制作一个简单的方法,可以使用一个数组,其中包含与矩形的每个交点。顶部

我在点(xo,yo)处有一条线的原点,我有多个“墙”,它们是矩形,x和y值在左上角。这条线是为了跟随某个东西(具体来说,玩家是一个运动跟踪器),但它不应该越过墙

因此,一旦线碰到墙的任何部分,它就不会越过墙。
我知道如何使用rectangle2d.intersects判断线条是否与墙发生碰撞,但我需要知道它在何处发生碰撞,以便线条的端点就是该点。

您尝试过在谷歌中搜索吗

您需要为矩形的每一侧绘制一条新线,然后检查与每一侧的碰撞。要制作一个简单的方法,可以使用一个数组,其中包含与矩形的每个交点。顶部:
点[0]
底部:
点[1]
左侧:
点[2]
右侧:
点[3]
在您的情况下,您需要考虑线的方向,以便知道要走哪一边;基本上,如果
xo
你选择底部
else
你选择顶部,如果
yo
你选择左侧
else
你选择右侧

public Point2D[] getIntersectionPoint(Line2D line, Rectangle2D rectangle) {

       Point2D[] point = new Point2D[4];

        point[0] = getIntersectionPoint(line,new Line2D.Double(rectangle.getX(),rectangle.getY(),rectangle.getX() + rectangle.getWidth(),rectangle.getY()));
        point[1] = getIntersectionPoint(line,new Line2D.Double(rectangle.getX(),rectangle.getY() + rectangle.getHeight(),rectangle.getX() + rectangle.getWidth(),rectangle.getY() + rectangle.getHeight()));
        point[2] = getIntersectionPoint(line,new Line2D.Double(rectangle.getX(),rectangle.getY(),rectangle.getX(),rectangle.getY() + rectangle.getHeight()));
        point[3] = getIntersectionPoint(line,new Line2D.Double(rectangle.getX() + rectangle.getWidth(),rectangle.getY(),rectangle.getX() + rectangle.getWidth(),rectangle.getY() + rectangle.getHeight()));

        return p;

    }

如果线条的原点位于矩形内部,则只需考虑矩形的宽度和高度。