2014-12-24 40 views
1

我目前正在研究超聲波測試相關的程序。參照下圖:尋找區域內反射光束交點的算法

enter image description here

我有黑盒作爲探針,用2條黑線作爲束照射向外,擊中底面和反射相交(由黑點來標記交點)與三角形的邊界(由藍線勾畫)。

我明白,給定的所有參數(例如每線的方程和光束角),我可以解決使用簡單三角學中的黑點的位置。

不過,我的問題是有解決這種問題的一個更好的/先進的方法是什麼? (例如,使用某種形式的繞線數算法,類似於多邊形問題中的點)。 我假設所有參數(梁的角度,探測器的準確位置和方向以及三角形)是已知的。

回答

3

我不認爲有太多的與衆不同,你可以在這裏使用。交點的計算相當簡單。

x方向從左到右,y從底部到頂部,假設我們底部的水平線在y1和頂部在y2,並且我們有兩個線段,其中x座標用於開始/結束指示的兩個段的點:

 x4  x2 
y2 ------------------- 
     \ /
      \/
      \/ 
      /\ 
     /\ 
     / \ 
     / \ 
y1 ------------------- 
     x1  x3 

兩條線段的參數化形式則是:

(x1 + t1 * (x2 - x1), y1 + t1 * (y2 - y1)) 
(x3 + t2 * (x4 - x3), y1 + t2 * (y2 - y1)) 

交點通過找到的t1和的值計算這兩點是相同的。從設置兩個y的值相等,我們可以很快看到t1t2必須相等:

y1 + t1 * (y2 - y1) = y1 + t2 * (y2 - y1) 
t1 * (y2 - y1) = t2 * (y2 - y1) 
t1 = t2 

知道了這一點,我們可以爲t2替代t1,設置x的值相等,並求解方程t1

x1 + t1 * (x2 - x1) = x3 + t1 * (x4 - x3) 
t1 * ((x2 - x1) - (x4 - x3)) = x3 - x1 
t1 = (x3 - x1)/((x2 - x1) - (x4 - x3)) 

一旦計算t1,你知道段相交如果它的值是0.0和1.0之間。如果是,則交點(xt, yt)通過將其代入段方程中的一個而獲得。整個事情然後變成(僞代碼):

t1 = (x3 - x1)/((x2 - x1) - (x4 - x3)) 
if t1 >= 0.0 and t1 <= 1.0 
    xi = x1 + t1 * (x2 - x1) 
    yi = y1 + t1 * (y2 - y1) 
else 
    no intersection 

你可以嘗試改善這一點。例如,您可以決定某些配置僅基於比較座標而不相交,而不進行完整計算。但由於計算本身非常簡單,所以看起來似乎不值得。

+0

我的想法,但我真的不明白,爲什麼是兩行相同的T?它不應該是t_1和t_2嗎? –

+0

@JohnTan是的,我相信結果是正確的,但我得出它的方式並不乾淨。我更新了答案。我希望這更有意義。 –

+0

謝謝。這非常有幫助。只是好奇,這是在計算機圖形中計算直線交點的標準方式嗎?我不會想到使用參數化方程來解決這個問題。 –