java 三点定位_Trilateration三边测量定位算法
Trilateration(三边测量)是一种常用的定位算法
已知三点位置 (x1, y1), (x2, y2), (x3, y3)
已知未知点 (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聚类算法,后两者在地图标注上使用比较广。
java 三点定位_Trilateration三边测量定位算法相关推荐
- java 三点定位_iBeacon定位-三点定位实现
基本原理 Trilateration(三边测量)是一种常用的定位算法: 已知三点位置 (x1, y1), (x2, y2), (x3, y3) 已知未知点 (x0, y0) 到三点距离 d1, d2, ...
- JAVA 三点定位相关计算(二,三角形质心算法)
三角形质心算法 三圆为R1,R2,R3,圆心坐标(X1,Y1),(X2,Y2),(X3,Y3),半径分别为r1,r2,r3. 相关链接 链接: JAVA 三点定位相关计算(一,两圆关系). 1,R1, ...
- 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 下载次 ...
- rssi参数获取_rssi定位算法及读取RSSI值程序分享
在区域监测.人员跟踪等无线传感器网络的应用领域,位置信息至关重要,事件发生的位置,人员位置均是传感器网络应用中的重要信息.随着移动通信.无线传感器网络技术的发展,室内环境下基于位置的服务越来越受到人们 ...
- 三角定位matlab,基于RSSI校正的三角形质心定位算法
%三边测量的定位算法 %dA,dB,dC为A,B,C到未知节点(假定坐标[x,y]未知)的模拟测量距离 function [P] = Triangle(A,B,C,dA,dB,dC) %A,B,C为三 ...
- 无线传感器网络定位算法
无线传感器网络定位算法 在此,需要强调无线传感器网络节点的自组织性.为避免人为配置节点坐标产生的误差干扰,及考虑到多数网络部署区域是人类不可达区域的情况,通常情况下选择参考节点的随机部署方式.在这种情 ...
- aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究
内容摘要:基于信号到达角度(AOA)的定位算法是一种常见的无线传感器网络节点自定位算法,算法通信开销低,定位精度较高.由于各种原因,估测的多个节点位置可能存在不可靠位置,提出了一种改进的基于信号到达角 ...
- DV-Hop 定位算法
1 DV-Hop 定位算法 DV-Hop定位算法是APS算法系列中使用最为广泛的定位方法, 其定位过程不依赖于测距方法, 利用多跳信标节点信息来参与节点定位, 定位覆盖率较大.DV-Hop 算法非 ...
- Java数据结构第一讲-排序算法
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
最新文章
- HDU 5727 Necklace
- createjs中shape的属性regX和regY
- AI 智能会议系统(36)——-外呼失败场景如何处理?
- 3、Fiddler 如何捕获Firefox的会话
- android jni示例,Android Jni代码示例讲解
- Vue+D3实现直方图与力导向图
- 自定义词库 android,[Android]从头到尾教你制作发音且字体显示正常的Ankidroid(Anki)词库 | 古意人...
- 数据库中如何求候选码
- 网吧管理员技术资料-转的
- 短视频直播平台第三方特效SDK接入教程(完整版)
- win10系统计算机搜索文件,win10搜索文件内容的方法是什么_win10精确搜索文件内容的方法...
- Mysql(三)Mysql索引基本原理
- 元宇宙营业厅,数字技术融合,赋能实体经济
- HTML文字阴影火焰,CSS3文字特效属性text-shadow的介绍,实例讲解火焰文字效果
- windows下vue-cli及webpack 构建网站(四) 路由vue-router的使用
- 中秋将至,想吃月饼了吗?
- cds大佬座谈会总结
- 【视频分享】尚硅谷Java视频教程_Jenkins视频教程
- 浅谈 React Fiber
- 3.《程序猿扯淡系列》约会的艺术--教你如何逆袭
热门文章
- Linux中vim中gg的英文全拼,计算机科学研究专家陶贤斌带您入门Linux中的vim
- CSDN专家吐槽实录
- spring的AOP和IOC的原理
- php fsockopen permission denied,php fsockopen()函数禁用解决办法
- 大白话聊框架设计(入门篇) | 第一章:Filter实现框架拦截
- 选什么培训选个培训机构好?
- Snake贪吃蛇小游戏纯js代码
- 云杉网络:一家自带“产学研”基因的公司
- 如封面所示,如何使用R语言制作一张海报
- 使用 Mathpix Snipping 和 MathType 快速输入公式