2013-05-27 45 views
1

我正在嘗試在程序中使用三邊測量來模擬它在現實生活中的方式。 我有3個發射器發出一個信號,在信號移動的每個正方形後變弱。我正在使用一個2D數組和代碼來生成一個粗略的數字圓。 這說明發射機使用二維三邊測量查找對象的位置

00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000001000000000 
00000000112110000000 
00000001223221000000 
00000000000 
000000000 
00000000000 
00000001223221000000 
00000000112110000000 
00000000001000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 

我的問題是一個,我該如何找到在網格中的接收器的位置? 如何找到所有三個圓相交的位置? 我試圖設置圓的方程相等,並解決,但沒有給我任何東西,它給了我虛數。

我也可以編輯代碼,以使圈子沒有填充,如果有幫助。 各圓的半徑可以改變

每個發射器的信號強度被預先由接收器已知的,並且強度也可以改變(在100,200,或300的範圍或任何其它範圍)

+0

我有一些其他問題。是否有變送器的最小/最大半徑?每臺變送器的半徑是相同還是不同? – 3xil3

+0

您可以嘗試使用RANSAC:http://users.utcluj.ro/~raluca/prs_2012/prs_lab_02e.pdf – NeplatnyUdaj

+0

您是否每個接收器都有三個數字(信號強度)?給定兩個信號強度,你知道兩個發射機的實際距離,還是隻知道它們的距離比? –

回答

0

你基本上有兩個問題

  1. 尋找發射
  2. 的位置計算路口

點1:

點1可以通過檢查網格中的特定點以蠻力的方式解決。然而,在嘗試找到第一個時可能會有一些優化。只要你找到一個,你就可以根據你找到的發射器的半徑和你需要找到的發射器的半徑,對他人的位置進行有根據的猜測。

我會推薦以接近最大已知半徑的間隔探測電網。假設所有發射器完全網格內,你可以探索像下圖(假設你有最大半徑爲5) - A的標記探測點:

00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000001000000000 
0000A00011211A000000 
00000001223221000000 
00000000000 
000000000 
00000000000 
00000001A23221000A00 
00000000112110000000 
00000000001000000000 
00000000000000000000 
00000000000000000000 
0000A00000000A000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000000000000000 
00000000A00000000A00 

有了這個,你可以探測你當前電網8個探頭。當涉及到網格邊緣的距離時,這可以進一步減少一些額外的檢查。但在你的情況下,你會發現你的第三個探測點位於半徑範圍內。從那裏開始,您可以中斷探測並查找找到的發射器的中心。

既然您已經找到了至少一個發射器的中心,您可以對其他發射器的位置進行有根據的猜測,因爲您知道每個發射器的範圍,並且您知道與下一個發射器的距離將會小於最大+最小範圍的範圍。再次,您可以在網格內以適當的時間間隔探測以快速找到第二個發射器。再次計算第二個發射器的確切中心。

第三個發射器很容易計算。計算兩個找到的發射器之間的線的中心點(在座標系或網格中很容易)。缺失點應位於您找到的兩個發射機之間的虛線所在的兩側,距離該線路中心點尚未找到的發射機範圍的最大距離。

點2:

答案可以在這個post

找到一種替代辦法是TULIP Algorithm