当前位置: 首页 > 知识库问答 >
问题:

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

公良浩邈
2023-03-14

标题说明了一切,我一直在四处寻找,找不到任何直截了当的东西。我将如何采取与点(x1,y1)的线

共有3个答案

薛文斌
2023-03-14

如果直线不相交,则返回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;
}
冯福
2023-03-14

一个矩形是4行。您可以计算直线与矩形的4条直线之间的交点。

给定两条直线的方程式,当x和y相等时,它们将相交。

y=m1x b1 y=m2x b2

求解你应该得到的方程:

x=b2-b1/(m1-m2);

请注意,如果m1==m2,直线是平行的,永远不会相交,在这种情况下,请注意除以0的值。

然后,由于要处理的线段比无限长的直线更粗,请检查相交是否在线段内脱落(检查X和Y是否都在每个线段的边界内)。

袁何平
2023-03-14

使用2D图形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));

这没有告诉你的是。。。

 类似资料:
  • 所以我有这个程序需要测试两个矩形并检查: < li >如果测试矩形在参考矩形内 < li >如果测试矩形与参考矩形重叠 < li >如果测试矩形仅与参考矩形共享一条边界 < li >如果测试矩形和参考矩形不同 参考矩形和测试矩形都是用它们的中心坐标(x,y)及其宽度和高度定义的。 我相信我已经正确地编码了第一个检查,但是我无法计算出最后三个重叠、共享边界和完全不同的检查。 以下是我到目前为止四次检

  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 我想检测rect什么时候碰到障碍物(obst1和obst2,obst3暂时不加)。我的障碍随着路径转换而移动。所有的形状都是长方形。提前感谢!!< br >以下是我的代码:

  • 问题内容: 除了我的Rect类: 我有一种方法来检查两个Rect是否相交(无双关): 测试用例: 这堂课很好。 我想知道的是,是否还有另一种(也许更快)的方式来检查矩形是否相交。我可以以某种方式对其进行优化吗? 问题答案: 我倾向于将矩形存储为min x,min y,max x和max y。然后当发生重叠时 如果它们重叠,则交点定义为 如果它们具有相同的边界,则应根据您是否认为它们重叠来进行一些注

  • 我试图从PDF中提取文本坐标和直线(或矩形)坐标。 类有和方法,这些方法根据各自TextPosition对象表示的文本块的方向转换坐标(根据@mkl的注释进行更正)。最终输出是一致的,与页面旋转无关。 输出所需的坐标为X0,Y0(页面左上角) 这是对@Tilman Hausherr的解决方案的轻微修改。y坐标被反转(高度-y),以保持其与文本提取过程中的坐标一致,并且输出被写入csv。 正在使用类

  • 我已经在这里呆了2-3周了,我仍然无法进行适当的碰撞检测。我用矩形创建了一个迷宫。我希望我的对象(在矩形中)每当我的对象与任何墙壁碰撞时停止,并能够移动到任何地方(或滑下墙壁)。我的墙壁(矩形)具有负坐标,如下所示: 我目前正在使用SO中发现的重叠方法。以下是我的CollisionManager类中的方法: 我有一个功能可以保存对象所做的所有位置移动。因此,当发生碰撞时,对象会恢复到最后一次移动之