在C ++中,在2D中,如何找到光线(由一个点和一个方向矢量定义)和一个矩形(由x,y,w,h定义)之间的交点?
________
| |
| |
------------------| |
|________|
这是基于无框架的模拟,所以我不太确定如何解决这个问题。
答案 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 <= L
和B <= y && y <= T
。