我目前正在研究超聲波測試相關的程序。參照下圖:尋找區域內反射光束交點的算法
我有黑盒作爲探針,用2條黑線作爲束照射向外,擊中底面和反射相交(由黑點來標記交點)與三角形的邊界(由藍線勾畫)。
我明白,給定的所有參數(例如每線的方程和光束角),我可以解決使用簡單三角學中的黑點的位置。
不過,我的問題是有解決這種問題的一個更好的/先進的方法是什麼? (例如,使用某種形式的繞線數算法,類似於多邊形問題中的點)。 我假設所有參數(梁的角度,探測器的準確位置和方向以及三角形)是已知的。
我目前正在研究超聲波測試相關的程序。參照下圖:尋找區域內反射光束交點的算法
我有黑盒作爲探針,用2條黑線作爲束照射向外,擊中底面和反射相交(由黑點來標記交點)與三角形的邊界(由藍線勾畫)。
我明白,給定的所有參數(例如每線的方程和光束角),我可以解決使用簡單三角學中的黑點的位置。
不過,我的問題是有解決這種問題的一個更好的/先進的方法是什麼? (例如,使用某種形式的繞線數算法,類似於多邊形問題中的點)。 我假設所有參數(梁的角度,探測器的準確位置和方向以及三角形)是已知的。
我不認爲有太多的與衆不同,你可以在這裏使用。交點的計算相當簡單。
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的值相等,我們可以很快看到t1
和t2
必須相等:
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
你可以嘗試改善這一點。例如,您可以決定某些配置僅基於比較座標而不相交,而不進行完整計算。但由於計算本身非常簡單,所以看起來似乎不值得。
我的想法,但我真的不明白,爲什麼是兩行相同的T?它不應該是t_1和t_2嗎? –
@JohnTan是的,我相信結果是正確的,但我得出它的方式並不乾淨。我更新了答案。我希望這更有意義。 –
謝謝。這非常有幫助。只是好奇,這是在計算機圖形中計算直線交點的標準方式嗎?我不會想到使用參數化方程來解決這個問題。 –