【问题标题】:Robotics Square Grid Intersection Point机器人方格网交点
【发布时间】:2025-11-30 10:05:01
【问题描述】:

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

【问题讨论】:

  • 您的网格是否由 100 个单元格组成,并且您需要与所触及的每条网格线相交?或者只是一个矩形,你需要与它的周长相交?

标签: algorithm math geometry trigonometry robotics


【解决方案1】:

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

第一段:从机器人位置到指向角的段。使该段大于网格的对角线,以确保它与边界相交。 第二段:构成相关墙的线段。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】: