光线和矩形之间的交点

时间:2012-02-03 13:44:07

标签: c++ geometry

在C ++中,在2D中,如何找到光线(由一个点和一个方向矢量定义)和一个矩形(由x,y,w,h定义)之间的交点?

                   ________
                  |        |
                  |        |
------------------|        |
                  |________|

这是基于无框架的模拟,所以我不太确定如何解决这个问题。

2 个答案:

答案 0 :(得分:5)

2D中的矩形= 4个线段。

所以你的问题实际上是:How do I determine whether or not two lines intersect, and if they do, at what x,y point?

您计算所有线段的交点,然后选择根据|A-Xi|关闭一个,其中A 矢量原点Xi是交点和{ {1}}表示向量的长度(||,如果您只需要比较距离并且不需要确切的数字,则实际上不需要使用sqrt(A.x*Xi.x + A.y*Xi.y)

答案 1 :(得分:2)

您的光线由y=px+q定义。将您的框定义为{R,B,L=R+w,T=B+h},这意味着右边缘在y=pR+q处相交;左侧边缘位于y=pL+q,底部位于x=(B-q)/p,顶部位于x=(T-q)/p

要检查这些交叉点是否与定义框的线段有关,您必须分别检查R <=x && x <= LB <= y && y <= T