机器人方形网格交点

Robotics Square Grid Intersection Point

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

起点在矩形内的射线的伪代码:
起点(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)

你可以简单地找到两条线段的交点。

第一段:从机器人在指向角度的位置开始的段。使此段大于网格的对角线,以确保它会与边界相交(如果要的话)。 第二段:构成相关墙的线段。

请参阅 http://www.faqs.org/faqs/graphics/algorithms-faq/ 1.03 节以了解相交两条线段的算法。

comp.graphics.algorithms 常见问题解答是解决机器人技术中常见几何问题的有用资源。