[英]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並測試幾乎不接觸球體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.