三点定位的算法

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

量子密钥分发系统的工程实践(四):FPGA在后处理中的核心实现与优化

本文深入探讨了FPGA在量子密钥分发(QKD)系统后处理中的核心实现与优化策略。文章详细拆解了FPGA如何高效完成原始密钥提取、误码协商和私密放大等关键任务,并分享了流水线设计、资源复用及存储器架构优化等工程实践“心法”,旨在解决高速、实时QKD系统中的性能瓶颈,提升密钥生成率。

t8u9v0的博客 388

Cartool实战:手把手教你完成静息态EEG微状态分析的组水平聚类与模板匹配

本文详细解析了使用Cartool进行静息态EEG微状态分析的组水平聚类与模板匹配全流程。从数据准备、算法选择到参数优化,提供了k-means与T-AAHC算法的实操建议,帮助研究者避开常见陷阱,获得可靠分析结果。特别针对最优类别数确定、模板匹配参数设置等核心环节进行深入探讨,适用于认知神经科学领域的EEG微状态研究。

weixin_31220401的博客 262

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

Claude Code 实战指南:从入门到高效编程

本文是一份Claude Code实战指南,旨在帮助开发者从入门到精通这款AI编程助手。文章详细讲解了如何通过清晰的指令公式与Claude Code高效沟通,并展示了如何将其深度集成到日常开发工作流中,例如理解陌生代码、调试和生成测试文档。指南还提供了避坑建议与最佳实践,并通过构建一个天气查询CLI工具的完整案例,演示了如何利用Claude Code加速开发进程,实现从设计到代码的高效人机协作。

weixin_28339967的博客 484

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

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

gitblog_06746的博客 320

抖音用户评论和ID的采集方法

随着5G时代的普及,各大运营商的套餐纷纷推出,使得流量成本进一步降低。同时5G线路高宽带、低延迟的技术特性和手机普及,让视频用户访问量快速增加。 由于大量的视频工具和拍摄APP的提供,让短视频的拍摄、制作包括发行都变得更加简单便捷,越来越多的普通人可以投入视频创作,创造了更丰富的互联网内容,视频作者从视频推广中能获取粉丝和推广收益。 目前抖音就是目前最重要的短视频平台之一,要及时获取上面的用户评论和ID,需要结合爬虫代理实现采集方案,下面的代码就能快速采集相关信息: package htmlunit; i

ssbt_2020的博客 6787

FIddler+Proxifer 实现PC客户端抓包详细教程

FIddler+Proxifer 实现PC客户端抓包详细教程

森明帮大于黑虎帮的博客 1万+

定位算法 三点定位MATLAB代码

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

gitblog_06773的博客 265

稳定性性能系列之十五——系统稳定性监控体系建设:从指标到预警的完整方案

深入探讨Android系统稳定性监控体系的设计与实现,涵盖指标体系设计、数据采集方案、异常检测算法、预警响应机制,并提供完整的监控平台搭建实践。

Cheson的专栏 1358

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

AI上推荐 之 AutoInt模型(Transformer开始玩特征交互)

1. 写在前面 这段时间做优化模型的事情,正好和特征交互有关系,这个也是推荐系统里面一直探索的一个方向,从浅层模型的FM, FFM, HOFM, FwFM到深层模型的DNN, PNN, NFM, AFM, DeepFM, DCN, xDeepFM, FiBiNet等,而这次正好借着这次机会, 多看一些有关于特征交叉方向的模型paper, 把一些新的模型或者较为前沿的思想融入进来。 上一篇的FiBinet模型就是在特征交互上一个非常有意思的探索, 通过SENET动态选择有用的交互特征, 然后再用一个双线性交互

Miracle8070 5724

【华为OD机试真题 2025C卷】895、贪心歌手 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷】895、贪心歌手 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华

KJ.JK 964

三点定位算法优化

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

weixin_30823001的博客 832

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

banglanrou0157的博客 1035

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

gitblog_06730的博客 1034

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

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

余额充值