Trilateration(三边测量)是一种常用的定位算法:

  1. 已知三点位置 (x1, y1), (x2, y2), (x3, y3)
  2. 已知未知点 (x0, y0) 到三点距离 d1, d2, d3

以 d1, d2, d3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式:

( x1 - x0 )2 + ( y1 - y0 )2 = d12
( x2 - x0 )2 + ( y2 - y0 )2 = d22
( x3 - x0 )2 + ( y3 - y0 )2 = d32

推导图

设未知点位置为 (x, y), 令其中的第一个球形 P1 的球心坐标为 (0, 0),P2 处于相同纵坐标,球心坐标为 (d, 0),P3 球心坐标为 (i, j),三个球形半径分别为 r1, r2, r3,z为三球形相交点与水平面高度。则有:

r12 = x2 + y2 + z2
r22 = (x - d)2 + y2 + z2
r32 = (x - i)2 + (y - j)2 + z2

当 z = 0 时, 即为三个圆在水平面上相交为一点,首先解出 x:

x = (r12 - r22 + d2) / 2d

将公式二变形,将公式一的 z2 代入公式二,再代入公式三得到 y 的计算公式:

y = (r12 - r32 - x2 + (x - i)2 + j2) / 2j

JAVA算法实现

public class Algorithem {public static void main(String[] args){double[] xy = Algorithem.trilateration(12641371.971, 4138703.5211, 6, 12641381.9026, 4138706.4714, 6, 12641370.7839, 4138708.7705, 6);System.out.println(xy[0]+"::"+xy[1]);}public static double[] trilateration(double x1,double y1,double d1, double x2, double y2,double d2, double x3, double y3, double d3){double []d={0.0,0.0};double a11 = 2*(x1-x3);double a12 = 2*(y1-y3);double b1 = Math.pow(x1,2)-Math.pow(x3,2) +Math.pow(y1,2)-Math.pow(y3,2) +Math.pow(d3,2)-Math.pow(d1,2);double a21 = 2*(x2-x3);double a22 = 2*(y2-y3);double b2 = Math.pow(x2,2)-Math.pow(x3,2) +Math.pow(y2,2)-Math.pow(y3,2) +Math.pow(d3,2)-Math.pow(d2,2);d[0]=(b1*a22-a12*b2)/(a11*a22-a12*a21);d[1]=(a11*b2-b1*a21)/(a11*a22-a12*a21);return d;}
}

D3.js实现

定义三个圆的坐标及半径,计算出交点的坐标 (obj_x, obj_y).

var x_0 = 150, y_0 = 150;
var x_1 = x_0, y_1 = y_0, d = 150, x_2 = x_0 + d, x_3 = 225, y_3 = 315, r = 100;
var i = x_3 - x_0, j = y_3 - y_0;
var x = (Math.pow(r, 2) - Math.pow(r, 2) + Math.pow(d, 2)) / (2 * d) + x_0;
var obj_x = x + x_0;
var y = (Math.pow(r, 2) - Math.pow(r, 2) - Math.pow(x, 2) + Math.pow((x - i), 2)+ Math.pow(j, 2)) / (2 * j);
var obj_y = y + y_0;

绘出圆形及交点:

svg.append("circle").attr("cx", x_1).attr("cy", y_1).attr("r", r).style("fill", "blue").style("opacity", 0.3);
svg.append("circle").attr("cx", x_2).attr("cy", y_0).attr("r", r).style("fill", "red").style("opacity", 0.4);
svg.append("circle").attr("cx", x_3).attr("cy", y_3).style("opacity", 0.5).attr("r", r).style("fill", "yellow");
svg.append("circle").attr("cx", obj_x).attr("cy", obj_y).attr("r", 3).style("fill", "red");

多于用实现定位算法,与之相同的也许还可以采用K-Means或Overlap聚类算法,后两者在地图标注上使用比较广。

Trilateration三边测量定位算法相关推荐

  1. java 三点定位_Trilateration三边测量定位算法

    Trilateration(三边测量)是一种常用的定位算法 已知三点位置 (x1, y1), (x2, y2), (x3, y3) 已知未知点 (x0, y0) 到三点距离 d1, d2, d3 以 ...

  2. UWB的定位算法(简单详细易懂)

    系列文章目录 文章目录 系列文章目录 前言 一.控制部分 二.UWB 的测距原理是什么? 三.TOF 数学计算 四.Trilateration 三边测量法的原理与计算方法(TDOA平面) 1.三边测量 ...

  3. 三角定位matlab,基于RSSI校正的三角形质心定位算法

    %三边测量的定位算法 %dA,dB,dC为A,B,C到未知节点(假定坐标[x,y]未知)的模拟测量距离 function [P] = Triangle(A,B,C,dA,dB,dC) %A,B,C为三 ...

  4. 无线传感器网络定位算法

    无线传感器网络定位算法 在此,需要强调无线传感器网络节点的自组织性.为避免人为配置节点坐标产生的误差干扰,及考虑到多数网络部署区域是人类不可达区域的情况,通常情况下选择参考节点的随机部署方式.在这种情 ...

  5. aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究

    内容摘要:基于信号到达角度(AOA)的定位算法是一种常见的无线传感器网络节点自定位算法,算法通信开销低,定位精度较高.由于各种原因,估测的多个节点位置可能存在不可靠位置,提出了一种改进的基于信号到达角 ...

  6. DV-Hop 定位算法

    1   DV-Hop 定位算法 DV-Hop定位算法是APS算法系列中使用最为广泛的定位方法, 其定位过程不依赖于测距方法, 利用多跳信标节点信息来参与节点定位, 定位覆盖率较大.DV-Hop 算法非 ...

  7. matlab rdk,rtklib_2.4.2_p3 gps导航定位算法,有最先进的rtk matlab 238万源代码下载- www.pudn.com...

    文件名称: rtklib_2.4.2_p3下载 收藏√  [ 5  4  3  2  1 ] 开发工具: C++ Builder 文件大小: 14970 KB 上传时间: 2014-07-20 下载次 ...

  8. 【欧式距离:二维和三维定位算法】

    [关于开发UWB模块所使用的二维和三维定位算法] 本文将介绍开发UWB模块中所使用到的二维定位算法(三点定位算法) 链接:三维空间的构建(四点定位算法) 内容概览 概念介绍 需要的材料 算法 欧几里得 ...

  9. Dv-Hop定位算法

    1   DV-Hop 定位算法 DV-Hop定位算法是APS算法系列中使用最为广泛的定位方法, 其定位过程不依赖于测距方法, 利用多跳信标节点信息来参与节点定位, 定位覆盖率较大.DV-Hop 算法非 ...

  10. rssi参数获取_rssi定位算法及读取RSSI值程序分享

    在区域监测.人员跟踪等无线传感器网络的应用领域,位置信息至关重要,事件发生的位置,人员位置均是传感器网络应用中的重要信息.随着移动通信.无线传感器网络技术的发展,室内环境下基于位置的服务越来越受到人们 ...

最新文章

  1. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令
  2. 【转】LINUX 手动建立SWAP文件及删除
  3. caffe 报错 Check failed: error == cudaSuccess (77 vs. 0) an illegal memory access was encounteredcaffe
  4. JAVA中的onkey_onKeyListener无法在虚拟键盘上工作
  5. 移动端点击输入框,弹出键盘,底部被顶起问题(vue)
  6. Nopcommerce主要用到的技术及特点
  7. linux定义数据结构压缩,Linux下数据结构学习笔记
  8. 一文搞懂深度学习中常用的优化算法
  9. 等级保护体系、信息安全管理体系及等级保护管理制度
  10. ROS导航仿真操作(3)
  11. 域名注册必须实名认证 《互联网域名管理办法》11月1日实施
  12. Erlang 游戏开发经验总结
  13. CVPPA彩色图片转COCO格式
  14. RT-Thread学习笔记——信号量
  15. 【cocos creater】5.仿《弓箭传说》- 创建虚拟遥感
  16. Window10设置图标名、文件名的字体大小方法
  17. 基于墨刀的软件界面原型设计----视频软件
  18. c#设计简单飞机行李托运计费系统
  19. 用Python每天自动给女朋友免费发短信
  20. Ubutnu18.04解决:Starting Wait until snapd is fully seeded...

热门文章

  1. 蓝牙怎么调声音大小_蓝牙耳机怎么调音量?
  2. kjb文件 解析_十四期全国BIM一级考试真题及解析
  3. 如何在高共模电压下测量小差分电压
  4. Python Excel 批量生成二维码
  5. easyrecovery15绿色版本操作简单数据恢复效果不错
  6. linux之linux下载软件包
  7. mysql嵌套查询实例_MySQL嵌套查询实例详解_MySQL
  8. mysql嵌套查询,MYSQL嵌套查询(子查询),把内层的查询结果作为外层的查询条件
  9. 计算机导论论文含图,计算机导论(论文).doc
  10. HTML爱心网页制作[樱花+爱心]