三点定位的算法

三点定位,
已知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

3张RTX 4090就能跑!BAGEL-7B多模态模型本地部署避坑指南(附Flash Attention安装技巧)

本文详细介绍了如何在3张RTX 4090显卡上本地部署BAGEL-7B多模态模型,包括硬件配置、环境设置、多卡并行优化及常见问题解决方案。特别提供了Flash Attention安装技巧和显存优化策略,帮助开发者高效运行这一开源多模态模型,实现文本与图像生成任务。

1a2s3d4f5g的博客 652

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 131

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

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

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

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

gitblog_06746的博客 320

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

「汽车电子助手」的博客 1万+

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box。

成长需要沉淀。 397

定位算法 三点定位MATLAB代码

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

gitblog_06773的博客 265

医学图像处理实战:利用OpenSlide解析病理SVS切片的完整解决方案

本文介绍了使用openslide处理病理SVS切片的完整流程,从基础安装到科研应用。主要内容包括:1)SVS切片特点及openslide工具简介;2)环境配置与软件安装;3)基础操作:读取切片、查看信息、可视化不同层级图像;4)进阶操作:坐标裁剪与批量处理;5)科研方向拓展:结合AI模型进行病理分割分类、量化分析及可视化报告。教程提供了完整的代码示例,帮助毕业设计学生快速掌握病理图像分析的核心技能。

m0_71589036的博客 310

最小二乘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

【GlobalMapper精品教程】038:模拟水位上升(洪水淹没分析)案例教程

基于数字高程模型 ( DEM )格网模型,实现给定水深情况下洪水淹没区的计算模型,讨论洪水淹没演进过程可视化实现的关键技术,以三维可视化方式,动态而形象地模拟在指定洪水水位下的洪水淹没演进过程。

智慧空间实验室 2884

【云原生技术】sonar的官方web接口,获取质量阀结果的接口

以下是一个示例思路,说明如何调用 SonarQube 的质量阀查询接口并在前端展示“哪些条件没过”。假设前端使用 AJAX 或 fetch 从后端接口拿到 SonarQube 返回的 JSON(或直接前端请求 SonarQube API),前端再把解析结果展示给用户。测试覆盖率 (Coverage) 当前仅有 60%,未满足最低 80% 的要求,需要补充测试或优化以提升覆盖率。接口),就会返回相应的质量阀状态信息;里使用它来查询当前质量阀(质量门)的状态。,你用它即可获取该次分析的质量阀状态。

weixin_46453070的博客 1278

三点定位算法优化

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

weixin_30823001的博客 832

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

banglanrou0157的博客 1035

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

gitblog_06730的博客 1034

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

空间三点定位算法资源文件 去发现同类优质开源项目: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、付费专栏及课程。

余额充值