Instantly share code, notes, and snippets.

# kdzwinel/trilateration.js Created Jan 3, 2014

Simple trilateration algorithm implementation in JavaScript.
 function getTrilateration(position1, position2, position3) { var xa = position1.x; var ya = position1.y; var xb = position2.x; var yb = position2.y; var xc = position3.x; var yc = position3.y; var ra = position1.distance; var rb = position2.distance; var rc = position3.distance; var S = (Math.pow(xc, 2.) - Math.pow(xb, 2.) + Math.pow(yc, 2.) - Math.pow(yb, 2.) + Math.pow(rb, 2.) - Math.pow(rc, 2.)) / 2.0; var T = (Math.pow(xa, 2.) - Math.pow(xb, 2.) + Math.pow(ya, 2.) - Math.pow(yb, 2.) + Math.pow(rb, 2.) - Math.pow(ra, 2.)) / 2.0; var y = ((T * (xb - xc)) - (S * (xb - xa))) / (((ya - yb) * (xb - xc)) - ((yc - yb) * (xb - xa))); var x = ((y * (ya - yb)) - T) / (xb - xa); return { x: x, y: y }; }

### rfox90 commented Apr 22, 2014

 What style of trilateration is this? It seems to be suited for non earth based coordinates in perhaps virtual environments?

### ravisharma1987 commented Oct 8, 2014

 This is not working. I tested with point (0,0) (0,100) and (100, 0) and the answer it gave (NaN, 99.99645) for distances 107.70, 40.0 and 116.619 where as the point should be (40,100)

### Athanasius commented Oct 10, 2014

 The issue is that the code assumes that the 'a' and 'b' points don't have the same 'x' co-ordinate. It's the var x = line ending in '/ (xb - xa)'. They need to be different to avoid a divide by zero. Swap your 2nd and 3rd points and it'll work.