Search code examples
javascripttrilateration

3D Trilateration in Javascript


I'm trying to do 3D trilateration in Javascript using https://github.com/gheja/trilateration.js and it seems to be working. However, certain simple cases should be yielding solutions but they are not. For example:

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)

This seems like a ridiculously simple example that should yield a solution at x:0,y:0, but instead the function tells me that there is no solution. Am I misunderstanding something about trilateration or is there an error in the function?

Any help would be appreciated.


Solution

  • Yes, it was actually a bug in the library, thanks @logidelic for finding it and @dtudury for tracking it down.

    I have fixed it now by zeroing the value if it is near to zero:

    b = sqr(p1.r) - sqr(x) - sqr(y);
    
    if (Math.abs(b) < 0.0000000001)
    {
        b = 0;
    }
    
    z = Math.sqrt(b);