簡體   English   中英

給定距離到已知坐標的N個點的距離,確定三維空間中一個點的位置

[英]Determine the position of a point in 3D space given the distance to N points with known coordinates

我試圖確定點p的(x,y,z)坐標。 我所擁有的是具有已知坐標的4個不同點m1,m2,m3,m4的距離。

詳細說明:我所擁有的是4點(m1,m2,m3,m4)的坐標,它們不在同一平面上:

m1: (x1,y1,z1),

m2: (x2,y2,z2),

m3: (x3,y3,z3),

m4: (x4,y4,z4)

歐幾里德距離形成m1-> p,m2-> p,m3-> p和m4-> p

D1 = sqrt( (x-x1)^2 + (y-y1)^2 + (z-z1)^2);

D2 = sqrt( (x-x2)^2 + (y-y2)^2 + (z-z2)^2);

D3 = sqrt( (x-x3)^2 + (y-y3)^2 + (z-z3)^2);

D4 = sqrt( (x-x4)^2 + (y-y4)^2 + (z-z4)^2);

我在尋找(x,y,z)。 我試圖通過考慮歐幾里德距離但沒有管理來解決這個4線方程和3個未知數的非線性系統與matlab fsolve。

有兩個問題:

  1. 如何找到點p的未知坐標:(x,y,z)
  2. 為了找到(x,y,z),我需要已知坐標和距離p的最小點數m是多少?

編輯:

這是一段沒有解決方案的代碼:

讓我們說我的觀點是:

m1 = [ 370; 1810;  863];

m2 = [1586;  185; 1580];

m3 = [1284; 1948;  348];

m4 = [1732; 1674; 1974];

x = cat(2,m1,m2,m3,m4)';

從每個點到p的距離都是

d = [1387.5; 1532.5; 1104.7; 0855.6]

根據我的理解,如果我想運行fsolve,我必須使用以下內容:1。創​​建一個函數2.調用fsolve

function F = calculateED(p)

m1 = [ 370; 1810;  863];

m2 = [1586;  185; 1580];

m3 = [1284; 1948;  348];

m4 = [1732; 1674; 1974];

x = cat(2,m1,m2,m3,m4)';

d = [1387.5; 1532.5; 1104.7; 0855.6]

F = [d(1,1)^2 - (p(1)-x(1,1))^2 - (p(2)-x(1,2))^2 - (p(3)-x(1,3))^2;
 d(2,1)^2 - (p(1)-x(2,1))^2 - (p(2)-x(2,2))^2 - (p(3)-x(2,3))^2;
 d(3,1)^2 - (p(1)-x(3,1))^2 - (p(2)-x(3,2))^2 - (p(3)-x(3,3))^2;
 d(4,1)^2 - (p(1)-x(4,1))^2 - (p(2)-x(4,2))^2 - (p(3)-x(4,3))^2;];

然后調用fsolve:

p0 = [1500,1500,1189];  % initial guess
options = optimset('Algorithm',{'levenberg-marquardt',.001},'Display','iter','TolX',1e-1);                     
[p,Fval,exitflag] = fsolve(@calculateED,p0,options);

我正在運行Matlab 2011b。

我錯過了什么嗎?

最小二乘解決方案將如何?

這里需要注意的是,m1,m2,m3,m4和d值可能沒有准確給出,但對於一個不應該成為問題的分析解決方案。

mathematica隨時可以解決三點問題:

p = Table[ RandomReal[{-1, 1}, {3}], {3}]
r = RandomReal[{1, 2}, {3}]
Reduce[Simplify[ Table[Norm[{x, y, z} - p[[i]]] == r[[i]] , {i, 3}], 
      Assumptions -> {Element[x | y | z, Reals]}], {x, y, z}, Reals]

這通常會返回false因為隨機球體通常不會有三個交叉點。

當你有一個解決方案時,你通常會有一對這樣的..

      (*   (x == -0.218969 && y == -0.760452 &&  z == -0.136958) ||
           (x == 0.725312 && y == 0.466006 &&   z == -0.290347)  *)

這有點令人驚訝地具有失敗的優雅分析解決方案。 它有點牽扯,所以我等着看是否有人有它的方便,如果沒有,有興趣我會嘗試記住步驟..

在Dmitys最小二乘建議后編輯,近似解決方案:

p = {{370, 1810, 863}, {1586, 185, 1580}, {1284, 1948, 348}, {1732, 
1674, 1974}};
r = {1387.5, 1532.5, 1104.7, 0855.6};
solution = {x, y, z} /. 
              Last@FindMinimum[ 
                     Sum[(Norm[{x, y, z} - p[[i]]] - r[[i]] )^2, {i, 1, 4}] , {x, y, z}]
Table[ Norm[ solution - p[[i]]], {i, 4}]

如你所見,你離確切的還很遠......

(* solution point {1761.3, 1624.18, 1178.65} *)
(* solution radii: {1438.71, 1504.34, 1011.26, 797.446} *)

我會回答第二個問題。 讓我們將未知點X命名為。如果您只知道A點並知道從X到A的距離,那么X可以在一個球體上,中心在A中。

如果你有兩個點A,B那么X就在一個圓圈上,該圓圈的交點給出了A和B的中心(如果它們相交)。

第三個點將添加另一個球體,三個球體之間的最終交點將給出兩個點。

第四點將最終確定您正在尋找的那兩點中的哪一點。

這就是GPS實際工作的方式。 你必須至少擁有三顆衛星。 然后GPS將猜測兩個點中哪一個是正確的,因為另一個點在太空中,但它無法告訴你高度。 技術上它應該,但也有錯誤,所以你“看到”的衛星越多,錯誤越少。

發現這個問題可能是一個起點。

取前三個方程,在MATLAB中求解3個方程和3個變量。 求解方程后,您將獲得兩對值,或者我們可以說兩組坐標為p。 保持每個集合在第4個等式中,你可以找出滿足方程的集合就是答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM