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