我正在尝试确定我的机器人与墙相交的点,因为它在地图中的位置和以弧度指向的角度。因此,为了总结问题,给定任意大小[1-infinity]的正方形网格,该网格内的对象以及该对象面对的角度(弧度),找到与网格边界的交点。 。例如,你有一个10 x 10网格,你的对象位于(5,5)位置,它面向pi / 8弧度(东北方向)的角度。如果这个物体是直线移动的话,它会在哪里与墙相交?是否存在适用于任何位置和任何角度的通用解决方案?到目前为止,我正在做的是在相同轨迹上计算网格外的点并查看所有点,直到找到墙,但我觉得可能有一个更优雅的解决方案。谢谢你的帮助!
答案 0 :(得分:0)
具有矩形内起点的射线的伪代码:
起点(X0, Y0)
射线角度Theta
,c = Cos(Theta), s = Sin(Theta);
矩形坐标:bottom left (X1,Y1), top right (X2,Y2)
if c >= 0 then //up
XX = X2
else
XX = X1
if s >= 0 then //right
YY = Y2
else
YY = Y1
if c = 0 then //vertical ray
return Intersection = (X0, YY)
if s = 0 then //horizontal ray
return Intersection = (XX, Y0)
tx = (XX - X0) / c //parameter when vertical edge is met
ty = (YY - Y0) / s //parameter when horizontal edge is met
if tx <= ty then //vertical first
return Intersection = (XX, Y0 + tx * s)
else //horizontal first
return Intersection = (X0 + ty * c, YY)
答案 1 :(得分:0)
您可以简单地找到两个线段的交点。
第一段:机器人在指向角处的位置。使此段大于网格的对角线,以确保它与边界相交。 第二段:构成相关墙的线段。
有关两个线段相交的算法,请参见http://www.faqs.org/faqs/graphics/algorithms-faq/第1.03节。
comp.graphics.algorithms FAQ是机器人中常见几何问题的有用资源。