簡體   English   中英

Javascript中的3D三邊形

[英]3D Trilateration in Javascript

我正在嘗試使用https://github.com/gheja/trilateration.js在Javascript中進行3D三邊測量,它似乎正在工作。 但是,某些簡單的案例應該產生解決方案,但事實並非如此。 例如:

var p1 = {x:69, y:0,  r:69, z:0}
var p2 = {x:0,  y:50, r:50, z:0};
var p3 = {x:0,  y:80, r:80, z:0};
trilaterate(p1, p2, p3, false)

這似乎是一個非常簡單的例子,它應該在x:0,y:0處產生一個解決方案,但是該函數告訴我沒有解決方案。 我是否誤解了關於三邊測量的事情或者函數中是否存在錯誤?

任何幫助,將不勝感激。

它看起來像你發現的回購的問題。

特別是如果你看這行https://github.com/gheja/trilateration.js/blob/master/trilateration.js#L111並注銷它用來計算z = Math.sqrt(sqr(p1.r) - sqr(x) - sqr(y));

sqr(p1.r): 4761
-sqr(x) - sqr(y): -4761.000000000017
sqr(p1.r) - sqr(x) - sqr(y): -0.000000000017
z: Math.sqrt(-0.000000000017)
therefore: z: NaN

它只是浮點數的一個特征( 浮動點數學是否被打破? )。 如果更改參數的順序( trilaterate(p1, p3, p2, false) ),則會得到2個非常接近正確答案的值。

真的,你的考試應該是一個特例; 前兩個球體的交點是單點。 如果這是一個預期的用例,您可能會考慮分配repo並測試幾乎不接觸球體。

是的,它實際上是庫中的一個錯誤,感謝@logidelic找到它並且@dtudury跟蹤它。

我現在通過將值歸零來修復它 ,如果它接近於零:

b = sqr(p1.r) - sqr(x) - sqr(y);

if (Math.abs(b) < 0.0000000001)
{
    b = 0;
}

z = Math.sqrt(b);

暫無
暫無

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

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