三点定位的算法

三点定位,
已知a,b,c三个顶点的x,y坐标
和三个点都z坐标的距离,la,lb,lc

求z点的坐标
原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求
但是,由于三个点的距离可能不准,不一定会有结果,
所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1
运行
gcc -lm test.c
test.c代码如下

#include "stdio.h"
#include "stdlib.h"
#include <math.h>
//坐标
double ax,ay,bx,by,cx,cy,zx,zy;
//距离
double la,lb,lc;
double cx1,cy1,cx2,cy2,cx3,cy3,cx4,cy4;
int main(void)
{
int i = 0,j = 0,n = 0;
int okflag = 0;
int err = 0;
int aberr = 0;
int acerr = 0;
int abcerr = 0;
int len;
int abrequery = 0;
int acrequery = 0;
int requery1 = 0;
int loopnum = 1;
int option = 0;
double cax,cay,cbx,cby,ccx,ccy;
double cax_abeyance1[6000],cay_abeyance1[6000];
double cbx_abeyance1[6000],cby_abeyance1[6000];
double ccx_abeyance1[6000],ccy_abeyance1[6000];
double cabx_abeyance1[10],caby_abeyance1[10],cabx_abeyance2[10],caby_abeyance2[10];
double cacx_abeyance1[10],cacy_abeyance1[10],cacx_abeyance2[10],cacy_abeyance2[10];
//遍历圆周上所有点
printf("use 'Enter' to divide x y\n");
printf("input A coordinate:\n");
scanf("%lf%lf",&ax,&ay);
if((ax > 1000)||(bx > 1000))
{
printf("figure is too big! input A coordinate again:\n");
scanf("%lf%lf",&ax,&ay);
}
printf("input B coordinate:\n");
scanf("%lf%lf",&bx,&by);
if((bx > 1000)||(bx > 1000))
{
printf("figure is too big! input B coordinate again:\n");
scanf("%lf,%lf",&bx,&by);
}
printf("input C coordinate:\n");
scanf("%lf%lf",&cx,&cy);
if((cx > 1000)||(cx > 1000))
{
printf("figure is too big! input C coordinate again:\n");
scanf("%lf%lf",&cx,&cy);
}
printf("input distance from A to Z:\n");
scanf("%lf",&la);
if(la > 1000)
{
printf("figure is too big! inputdistance from A to Z again:\n");
scanf("%lf",&la);
}
printf("input distance from B to Z:\n");
scanf("%lf",&lb);
if(lb > 1000)
{
printf("figure is too big! inputdistance from B to Z again:\n");
scanf("%lf",&lb);
}
printf("input distance from C to Z:\n");
scanf("%lf",&lc);
if(lc > 1000)
{
printf("figure is too big! inputdistance from C to Z again:\n");
scanf("%lf",&lc);
}
printf("\n");
printf("A(%lf,%lf)\n",ax,ay);
printf("B(%lf,%lf)\n",bx,by);
printf("C(%lf,%lf)\n",cx,cy);
printf("AZ = %lf\n",la);
printf("BZ = %lf\n",lb);
printf("CZ = %lf\n",lc);
//INPUT:
for(zx = ax -la;zx <= ax + la;zx++)
{
do
{
for(zy = ay -la;zy <= ay + la;zy++)
{
cax = zx - ax;
cax = fabs(cax);
cax = pow(cax,2);
cay = zy - ay;
cay = fabs(cay);
cay = pow(cay,2);
if(((cax + cay) > (la*la - err))&&((cax + cay) < (la*la + err)))
{
okflag = 1;
cax_abeyance1[i] = zx;
cay_abeyance1[i] = zy;
n++;
}
}
if(!okflag)err++;
} while (okflag == 0);
i++;
err = 0;
okflag = 0;
}
printf("query...\n");
i = 0;
for(zx = bx -lb;zx <= bx + lb;zx++)
{
do
{
for(zy = by -lb;zy <= by + lb;zy++)
{
cbx = zx - bx;
cbx = fabs(cbx);
cbx = pow(cbx,2);
cby = zy - by;
cby = fabs(cby);
cby = pow(cby,2);
if(((cbx + cby) > (lb*lb - err))&&((cbx + cby) < (lb*lb + err)))
{
okflag = 1;
cbx_abeyance1[i] = zx;
cby_abeyance1[i] = zy;
}
}
if(!okflag)err++;
} while (okflag == 0);
i++;
err = 0;
okflag = 0;
}
printf("query...\n");
getchar();
i = 0;
for(zx = cx -lc;zx <= cx + lc;zx++)
{
do
{
for(zy = cy -lc;zy <= cy + lc;zy++)
{
ccx = zx - cx;
ccx = fabs(ccx);
ccx = pow(ccx,2);
ccy = zy - cy;
ccy = fabs(ccy);
ccy = pow(ccy,2);
if(((ccx + ccy) > (lc*lc - err))&&((ccx + ccy) < (lc*lc + err)))
{
okflag = 1;

ccx_abeyance1[i] = zx;
ccy_abeyance1[i] = zy;
n++;
}
}
if(!okflag)err++;
} while (okflag == 0);
i++;
err = 0;
okflag = 0;
}
printf("query a b c over!\n");
printf("press Enter to continue!\n");
//必须加不然运行出错,但不会停止
getchar();
do
{
//找ab 交点,因为距离的偏差,所以坐标会有偏差
aberr =0;
do
{
for(i = 0;i <= 2*la;i++)
{
for(j = 0;j <= 2*lb;j++)
{
if(cax_abeyance1[i] == cbx_abeyance1[j])
{

if((cay_abeyance1[i] > (cby_abeyance1[j] - aberr - abcerr))&&(cay_abeyance1[i] < (cby_abeyance1[j] + aberr + abcerr)))
{
cabx_abeyance1[abrequery] = cax_abeyance1[i];
caby_abeyance1[abrequery] = cay_abeyance1[i];
printf("cabx_abeyance1[%d]=%f",abrequery,cabx_abeyance1[abrequery]);
printf("caby_abeyance1[%d]=%f\n\n",abrequery,caby_abeyance1[abrequery]);
abrequery++;
}
}
}
}
if(abrequery < loopnum)aberr++;
}while(abrequery < loopnum);
acerr =0;
//找ac 交点
do
{
for(i = 0;i <= 2*la;i++)
{
for(j = 0;j <= 2*lc;j++)
{
if(cax_abeyance1[i] == ccx_abeyance1[j])
{
if((cay_abeyance1[i] > (ccy_abeyance1[j] - acerr - abcerr))&&(cay_abeyance1[i] < (ccy_abeyance1[j] + acerr + abcerr)))
{
cacx_abeyance1[acrequery] = cax_abeyance1[i];
cacy_abeyance1[acrequery] = cay_abeyance1[i];
acrequery++;
}
}
}
}
if(acrequery < loopnum)acerr++;
}while(acrequery < loopnum);
//找交点的交点
for(i = 0;i < abrequery;i++)
{
for(j = 0;j < acrequery;j++)
{
if(cabx_abeyance1[i] == cacx_abeyance1[j])
{
requery1 = 1;
printf("final result is (%f,%f)\n",cabx_abeyance1[i],caby_abeyance1[i]);
}
}
}
if(requery1 == 0)
{
loopnum++;
abcerr++;
}
if(loopnum == 10)
{
printf("chech input figure is right\n");
}
}while(requery1 ==0);
printf("finish!\n");
getchar();
return 0;
}
介绍一下三角形定位法 “三点定圆”双站交叉定位法是什么?介绍一下粒子群算法 介绍一下三角形定位法 “三点定圆”双站交叉定位法是什么? 介绍一下粒子群算法 阅读详情

相关推荐

从蓝牙信标到室内定位:用JavaScript在浏览器里玩转RSSI三点定位算法

本文详细介绍了如何使用JavaScript在浏览器中实现基于蓝牙信标的RSSI三点定位算法,包括信号强度测量、数学原理推导、算法实现及可视化演示。通过实际代码示例,展示了如何解决室内定位中的核心问题,并探讨了性能优化和实际应用中的挑战。

weixin_30873847的博客 1625

三点定位法(原理及实现)

三点定位法(原理及实现) 背景 学习笔记 参考 https://blog.youkuaiyun.com/jjwwwww/article/details/87714318#_4 原理 三点定位,顾名思义,需要三个点,这三个点一般为基站,定谁的位置?一般为客户端或者说终端的位置。通过测量终端和基站的距离(这个测量的过程中可能会存在误差,先假设没有误差),将其作为这三个圆的半径,画图,最终求得三圆的交点,交点...

1、、的博客 5万+

C#实现三点定位算法

三点定位算法是一种在无线定位技术中广泛使用的算法,能够根据三个已知点的位置估计目标位置。在实际应用中,我们可以通过测量目标与三个基站的距离或信号强度来实现无线定位。在本文中,将介绍如何使用C#语言实现三点定位算法。的目标点作为参数进行计算。需要注意的是,在实际应用中,我们需要根据实际情况进行坐标和距离的采集和输入。基于上述公式,我们可以使用C#语言实现三点定位算法。根据上述公式,可以推导出目标点坐标。作为已知点,以距离分别为。在上述代码中,我们以点。C#实现三点定位算法。

DarcyCode的博客 539

三点定位法原理及实现——蓝牙定位

三点定位法原理及C语言实现前言原理两圆相交两圆不相交代码实现 前言 最近在做蓝牙室内定位,蓝牙定位用到的一个非常经典的算法就是三点定位法。 原理 三点定位法,顾名思义首先有三个圆点,同时我们也知道这三个圆的半径,最终求得三圆的交点,达到定位效果。如图: 我们的目的是求得O点,利用毕达哥拉斯定理我们可以快速求得O点坐标。不过事与愿违,现实情况并不总是如人意,而是这样: 甚至有的情况其中两个圆或者...

jjwwwww的博客 3万+

【定位模型】基于UWB技术三点定位(Trilateration)算法仿真实现

三点定位(Trilateration)算法的实现示例,基于论文 "An algebraic solution to the multilateration problem"。该算法用于通过已知的参考点和与这些点的距离来估计目标点的位置。

Fanjufei的博客 812

三点定位算法

javascript+html5实现三点定位算法。源码分享。基于rssi的三点定位算法,是已知三个点的坐标和未知点到这三个点的rssi的信号值,求解未知点的坐标。

基于rssi的三点定位算法

基于rssi的三点定位算法,是已知三个点的坐标和未知点到这三个点的rssi的信号值,求解未知点的坐标。         首先是将rssi信号转换为距离:             d=10^((ABS(RSSI)-A)/(10*n))         其中d为距离,单位是m。         RSSI为rssi信号强度,为负数。         A为距离探测设备1m时的r

u013090676的博客 5万+

三点定位的c语言程序

经过测试准确可用,程序简洁。使用Microsoft Visual Studio 2010编写。

平面三点定位算法

javascript版: 1 //平面三点定位算法 2 function locate(x1, y1, x2, y2, x3, y3) { 3 var a, b; 4 a = (y2 - y1) / (x2 - x1); 5 b = y1 - a * x1; 6 7 var xMiddle = (x1 + x2) / 2; 8 ...

weixin_33775582的博客 995

Axure RP9汉化+授权全攻略:从下载到激活一步到位(附最新授权码)

本文提供Axure RP9从下载安装到界面汉化的完整指南,帮助设计师和产品经理快速上手这款原型设计工具。详细讲解了如何安全获取软件、执行汉化操作、理解核心界面布局,并介绍了创建交互原型和生成HTML文件的基础步骤,助力用户高效开展设计工作。

cuda7parallel的博客 1140

SPSS与SPSS Modeler,不一样的世界

1. SPSS软件的前世今生 1.1 IBM SPSS的由来 与数据打过交道的小伙伴们,应该对SPSS软件都不陌生。SPSS是世界上最早的统计分析软件,由斯坦福大学的三个研究生大牛于1968年研发,同时还成立了SPSS公司。SPSS最初的全称是Solutions Statistical Package for the Social Sciences(社会科学统计软件包),随着SPSS产品服务领...

qq_24339451的博客 3613

java 三点定位_三点定位的算法

#include "stdio.h"#include "stdlib.h"#include //坐标double ax,ay,bx,by,cx,cy,zx,zy;//距离double la,lb,lc;double cx1,cy1,cx2,cy2,cx3,cy3,cx4,cy4;int main(void){int i = 0,j = 0,n = 0;int okflag = 0;int err ...

weixin_39909859的博客 1037

GD32F303串口DMA发送数据避坑指南:为什么你的发送函数会卡住?

本文深入解析GD32F303单片机串口DMA发送数据时常见的卡死问题,提供详细的避坑指南。从DMA传输完成中断时序、发送状态管理到双通道DMA的特别注意事项,全面剖析问题根源并给出解决方案,帮助开发者构建健壮的DMA发送机制。

weixin_27038245的博客 294

定位算法三点定位MATLAB代码:精准定位的艺术

定位算法三点定位MATLAB代码:精准定位的艺术 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代科技快速发展的今天,位置服务已经成为我们日常生活不可或缺的一部分。无论是自动驾驶、无人机导航还是智能物流,精准的定位技术都是核心所在。今天,我们将为您推荐一款开源的MATLAB代码——定位算法三点定位MATLAB代码,它以其独特的算法和简洁的实现方式,为科研和工程应用...

gitblog_06746的博客 320

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5135

2025年12月11日 Coherent收发器下沉到数据中心:调研

技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。

weixin_51184047的博客 1167

定位算法 三点定位MATLAB代码

定位算法 三点定位MATLAB代码 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了一个基于MATLAB的三点定位算法实现代码。该代码适用于需要进行位置定位的场景,通过三个已知位置的坐标和距离,计算出目标位置的确切坐标。 描述 功能特点:本代码利用三点定位原理,在MATLAB环境中实现了定位算法,用户可以直接使用。 使用说明:代码经过测试,可以直接在MATLAB中运...

gitblog_06773的博客 265

超融合架构实战:如何用3节点搭建企业级分布式存储系统?

本文详细介绍了如何利用3节点搭建企业级分布式存储系统的超融合架构实战指南。从硬件选型、网络配置到存储策略调优,提供了全面的实操建议和性能优化技巧,帮助企业实现高效、弹性的IT基础设施。特别适合需要简化运维、提升存储性能的中型企业参考。

weixin_29200485的博客 325

最小二乘2D三点定位算法

非线性最小二乘(2D)三点定位算法 (pi−p0)T(pi−p0)=r2i(pi−p0)T(pi−p0)=ri2 (p_i - p_0)^T(p_i - p0) = r_i^2 argmin&amp;amp;nbsp;p0&amp;amp;nbsp;&amp;amp;nbsp;∥J(&amp;amp;nbsp;p0)∥.arg⁡min&amp;amp;nbsp;p0⁡&amp;amp;nbsp;&amp;

caizou123123的博客 6525

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 381

CKS-CN考试之路----03

这题不需要去生成image和生成deployment所以只需要去检测对应的值即可。编辑/cks/docker/Dockerfile,修改最后第二行的值。编辑/cks/docker/deployment.yaml。

Q先生 824

三点定位算法优化

在三点定位中,在部份情况都会是不精准的,如下图 当图3,图4时,用三角形重心定位算法计算出最终的定位点坐标 转载于:https://www.cnblogs.com/7qin/p/10010326.html...

weixin_30823001的博客 832

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

「C#学习笔记」三点定位算法

自己写的,可能还有很多不足,看着哪里不对的求提出,我改~ 先上代码,然后解释我的想法 1 namespace ThreePointOrientation 2 { 3 class Program 4 { 5 struct Point 6 { 7 public int x; 8 ...

banglanrou0157的博客 1035

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

空间三点定位算法资源文件:精准定位,探索三维世界

空间三点定位算法资源文件:精准定位,探索三维世界 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在人工智能和机器视觉领域,空间定位算法至关重要。今天,我们要介绍的是一个开源项目——空间三点定位算法资源文件。这个项目专注于空间中点的定位,它可以帮助开发者根据一个点与三个已知坐标点的距离,精确计算出该点的空间坐标(x, y, z)。无论是机器人导航、无人驾驶还是虚拟现实,...

gitblog_06730的博客 1034

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

空间三点定位算法资源文件

空间三点定位算法资源文件 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件提供了关于空间三点定位算法的详细内容,该算法能够根据当前点与空间中三个已知坐标点(x, y, z坐标)的距离,精确计算出当前点的空间坐标(x, y, z)。 文件内容 算法原理:深入解析空间三点定位的数学原理及推导过程。 算法实现:提供算法的具体实现步骤,包括距离计算、方程组求解等。 应用...

gitblog_06740的博客 419

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 ...

weixin_39588084的博客 959
上一篇: jslinux的kernel的重新编译
下一篇: shader and Program编程基本概念 - 转
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值