机器人方形网格交点

时间:2016-04-21 02:33:47

标签: algorithm math geometry trigonometry robotics

我正在尝试确定我的机器人与墙相交的点,因为它在地图中的位置和以弧度指向的角度。因此,为了总结问题,给定任意大小[1-infinity]的正方形网格,该网格内的对象以及该对象面对的角度(弧度),找到与网格边界的交点。 。例如,你有一个10 x 10网格,你的对象位于(5,5)位置,它面向pi / 8弧度(东北方向)的角度。如果这个物体是直线移动的话,它会在哪里与墙相交?是否存在适用于任何位置和任何角度的通用解决方案?到目前为止,我正在做的是在相同轨迹上计算网格外的点并查看所有点,直到找到墙,但我觉得可能有一个更优雅的解决方案。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

具有矩形内起点的射线的伪代码:
起点(X0, Y0)
射线角度Thetac = 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是机器人中常见几何问题的有用资源。