2016-04-21 52 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)