Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1.  
  2. public Node trilateration(List<Circle> circles, boolean return_middle){
  3. Node p1 = circles.get(0).center;
  4. Node p2 = circles.get(1).center;
  5. Node p3 = circles.get(2).center;
  6.  
  7. Node ex = vector_divide(vector_subtract(p2, p1), norm(vector_subtract(p2, p1)));
  8. double i = dot(ex, vector_subtract(p3, p1));
  9. Node a = vector_subtract(vector_subtract(p3, p1), vector_multiply(ex, i));
  10. Node ey = vector_divide(a, norm(a));
  11. Node ez = vector_cross(ex, ey);
  12. double d = norm(vector_subtract(p2, p1));
  13. double j = dot(ey, vector_subtract(p3, p1));
  14.  
  15. double x = (sqr(circles.get(0).radius) - sqr(circles.get(1).radius) + sqr(d)) / (2 * d);
  16. double y = (sqr(circles.get(0).radius) - sqr(circles.get(2).radius) + sqr(i) + sqr(j)) / (2 * j) - (i / j) * x;
  17. double z = Math.sqrt(sqr(circles.get(0).radius) - sqr(x) - sqr(y));
  18.  
  19. if(Double.isNaN(z)){
  20. return null;
  21. }
  22.  
  23. a = vector_add(p1, vector_add(vector_multiply(ex, x), vector_multiply(ey, y)));
  24. Node p4a = vector_add(a, vector_multiply(ez, z));
  25. Node p4b = vector_subtract(a, vector_multiply(ez, z));
  26.  
  27. if (z == 0 || return_middle) {
  28. return a;
  29. } else {
  30. // return [p4a, p4b];
  31. return null;
  32. }
  33. }
  34.  
  35. public double distance(double x1, double y1, double z1, double x2, double y2, double z2){ //Evklidovo rastojanie
  36. return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
  37. }
  38.  
  39.  
  40. public double sqr(double a) {
  41. return a * a;
  42. }
  43.  
  44. public double norm(Node a) {
  45. return Math.sqrt(sqr(a.X) + sqr(a.Y) + sqr(a.Z));
  46. }
  47.  
  48. public double dot(Node a, Node b) {
  49. return a.X * b.X + a.Y * b.Y + a.Z * b.Z;
  50. }
  51.  
  52. public Node vector_subtract(Node a, Node b) {
  53. Node node = new Node(a.X-b.X, a.Y-b.Y, a.Z-b.Z, false);
  54. return node;
  55. }
  56.  
  57. public Node vector_add(Node a, Node b) {
  58. Node node = new Node(a.X+b.X, a.Y+b.Y, a.Z+b.Z, false);
  59. return node;
  60. }
  61.  
  62. public Node vector_divide(Node a, double b) {
  63. Node node = new Node(a.X/b, a.Y/b, a.Z/b,false);
  64. return node;
  65. }
  66.  
  67. public Node vector_multiply(Node a, double b) {
  68. Node node = new Node(a.X*b, a.Y*b, a.Z*b,false);
  69. return node;
  70. }
  71.  
  72. public Node vector_cross(Node a, Node b) {
  73. Node node = new Node(a.Y * b.Z - a.Z * b.Y,a.Z * b.X - a.X * b.Z,a.X * b.Y - a.Y * b.X,false);
  74. return node;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement