2016-04-21 56 views
1

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

+0

您的网格是否由100个单元格组成,并且您需要与每个网格线相交的交点?或者只是一个矩形,你需要与它的边界相交? – MBo

回答

0

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

第一段:机器人在指向角度位置的段。使该段比网格的对角线更大,以确保它将与边界相交(如果它将要)。 第二部分:组成相关墙的线段。

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

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

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)