2010-02-02 43 views
1

給定一個起點,一個標題,一段距離和一條線段,找到沿着這個標題的第一個點,該點距離該線段指定的距離。如何找到距離線段指定距離的標題上的第一個點?

我介紹了兩種情況,但我無法覆蓋最後一個。

第一種情況:遠離線路。即使起點位於指定距離內,也可以忽略它。

第二種情況:它與該線相交。我用trig和三角形解決了它。最初沒有考慮下一個案例。

第三種情況:它正朝着這條線前進,但它並不相交。我認爲這將解決第二種情況,如果它正確完成。

三個子情況:

  1. 的最小線距離比規定的距離大。忽略它。

  2. 最小線距等於指定的距離。已經找到了點。

  3. 最小線距小於指定距離。這意味着沿着標題到線段端點的垂直線小於所需的距離。這也意味着在這條垂直線的任一側將是所需距離的兩條線。一個垂直於航向,而另一個最接近相同的端點並且不垂直於航向。只需要找出這些點並查看哪一點更接近起點。

這是我今天被卡住的地方。繪製它很容易,但做矢量計算或任何變得棘手。

很可能改寫本作:

在什麼時間(s)是P(t) = P0 + t*v在從該線段L((x1,y1), (x2,y2))的距離D

v=(sin(heading), -cos(heading))在我的情況。

回答

0

謝謝,這是有效的。 我發現阿爾法是這樣的:

heading = 45.0*pi/180. #heading 45 degrees. 
if x1 > x2: #line segment (x1,y1)<->(x2,y2) 
    dx = x2 - x1 
    dy = y2 - y1 
else: 
    dx = x1 - x2 
    dy = y1 - y2 

segmentHeading = atan2(dx, dy) 

if heading > 0: 
    alpha = segmentHeading + heading 
else: 
    alpha = -segmentHeading + heading 

t = abs((dStart - D)/-cos(alpha)) #-cos in python, sin in C. 
0

拍攝莽您的解決方案並不總是奏效。我發現了一個計數器例如:

線段=(0,0) - >(0,14)

開始點=(19,6)@標題西/逆時針

-159.5或200.5

它會在(2.952,0.0)處相交的線,所以我問,它在0.0的距離內到達哪裏。

我得到的結果不正確。

http://img5.imageshack.us/i/failuref.png/

我怎樣才能知道哪些會工作中使用您的解決方案,哪些不工作所依賴的點和線段之間的最小起始距離是否創建一個垂直線上。

如果我可以在下一篇文章中發表另一張圖片,我會舉出一個成功的例子。

我本來希望發佈一些Sage的代碼來生成這些圖像,但代碼標記不幸地接受了python。

0

您好我最終與想出了該溶液。

  1. 光線是否與平行且距離線段D的距離D相交。只需繪製一個矩形並檢查與線段平行的邊。

  2. 該射線是否在該線段的每個端點處與半徑爲D的圓相交。

  3. 將總單位時間減至最短,以找出沿着距離線段D的射線的第一個點。

可能的邊界情況:D內的起始點是否偏離該線?直到用戶如何處理這種情況。

相關問題