GPS模拟C语言
c语言gps课程设计

c语言 gps课程设计一、课程目标知识目标:1. 掌握C语言中结构体、数组、指针等基本知识,并能运用这些知识描述GPS数据结构。
2. 学会使用C语言编写程序,实现对GPS数据的读取、存储和处理。
3. 了解GPS坐标系相关知识,理解经纬度与实际地理位置的关系。
技能目标:1. 能够运用C语言编写具有实际功能的GPS数据处理程序,提高编程实践能力。
2. 学会使用调试工具,培养查找和解决编程中问题的能力。
3. 学会分析实际问题,提取关键信息,运用所学知识解决问题的能力。
情感态度价值观目标:1. 培养学生对C语言编程的兴趣,提高学习积极性,树立自信心。
2. 培养学生团队合作意识,学会与他人分享和交流编程经验。
3. 引导学生关注GPS技术在生活中的应用,了解科技发展对社会的重要性,培养科技创新精神。
课程性质:本课程为C语言编程实践课,以GPS数据处理为主题,结合实际应用场景,培养学生的编程能力和实际问题解决能力。
学生特点:学生已经具备C语言基础知识,具有一定的编程能力,对实际应用场景有较高的兴趣。
教学要求:教师需引导学生运用所学知识,注重实践操作,关注学生在课程中的参与度,提高学生的编程实践能力和创新思维。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. GPS基础知识介绍:讲解GPS坐标系、经纬度表示方法,以及GPS数据格式。
相关教材章节:第一章 导论2. C语言基础知识回顾:复习结构体、数组、指针等基本概念。
相关教材章节:第二章 C语言基础3. GPS数据结构设计:学习如何使用C语言描述GPS数据结构,包括结构体定义和数组使用。
相关教材章节:第三章 数据类型与表达式4. GPS数据读取与存储:学习文件操作,实现对GPS数据的读取和存储。
相关教材章节:第四章 文件操作5. GPS数据处理与分析:学习使用C语言编写程序,对GPS数据进行处理和分析。
相关教材章节:第五章 控制结构6. GPS应用案例:分析实际应用场景,引导学生运用所学知识解决问题。
wince GPS C 编程完整精间版

#include "stdafx.h"#include <windows.h>#include <commctrl.h>#include <gpsapi.h>#pragma comment(lib,"gpsapi.lib")#define MAX_WAIT 5000#define MAX_AGE 3000#define GPS_CONTROLLER_EVENT_COUNT 3HANDLE s_hNewLocationData = CreateEvent(NULL, FALSE, FALSE, NULL); HANDLE s_hDeviceStateChange = CreateEvent(NULL, FALSE, FALSE, NULL); HANDLE s_hExitThread = CreateEvent(NULL, FALSE, FALSE, NULL);HANDLE s_hGPS_Device = GPSOpenDevice(s_hNewLocationData, s_hDeviceStateChange, NULL, NULL);FILE *logfd;WCHAR* GetTodayTime(WCHAR timeStr[255]){SYSTEMTIME time;GetLocalTime(&time);int nYear = time.wYear;int nMonth = time.wMonth;int nDay = time.wDay;int nHour = time.wHour;int nMinute = time.wMinute;int nSecond = time.wSecond;wsprintf(timeStr,L"%.4d-%.2d-%.2d%.2d:%.2d:%.2d",nYear,nMonth,nDay,nHour,nMinute,nSecond);return timeStr;}DWORD GPSThreadProc(__opt LPVOID lpParameter){//WCHAR *p_timeStr;WCHAR timeS[255];GPS_POSITION gps_Position = {0}; //放数据的DWORD dwRet = 0; //表状态的,具体状态干具体的事WCHAR msg[300];GPS_DEVICE gps_Device = {0}; //存放GPS设备信息,在GPSGetDeviceState前要赋值,如下HANDLE gpsHandles[GPS_CONTROLLER_EVENT_COUNT] = {s_hNewLocationData, s_hDeviceStateChange, s_hExitThread};gps_Position.dwSize = sizeof(gps_Position); //POSITION结构的第一个参数gps_Position.dwVersion = GPS_VERSION_1; //POSITION结构的第二个参数gps_Device.dwVersion = GPS_VERSION_1; //DEVICE结构的第二个参数gps_Device.dwSize = sizeof(gps_Device); //DEVICE结构的第一个参数GetTodayTime(timeS);fwprintf(log,L"%s: Start.\n",timeS);while (1) //循环获取{dwRet = WaitForMultipleObjects(GPS_CONTROLLER_EVENT_COUNT, gpsHandles, FALSE, 100);switch(dwRet){case WAIT_OBJECT_0: //有数据,获取并输出dwRet = GPSGetPosition(s_hGPS_Device, &gps_Position, MAX_AGE , 0);if(gps_Position.dblLongitude!=0){//p_timeStr=GetTodayTime(timeS);GetTodayTime(timeS);wsprintf(msg, L"%s: %.2d/%.2d,%f,%f\n",timeS,gps_Position.dwSatelliteCount ,gps_Position.dwSatellite sInView ,gps_Position.dblLongitude, gps_Position.dblLatitude);//MessageBox(NULL, msg, L"GpsState", 0);//WriteToLog(msg);fwprintf(logfd, L"%s",msg);}break;case WAIT_OBJECT_0 + 1: //设备状态变化,获取状态信息dwRet = GPSGetDeviceState(&gps_Device);ZeroMemory(&gps_Device, sizeof(gps_Device));gps_Device.dwVersion = GPS_VERSION_1;if (ERROR_SUCCESS == dwRet){ //状态获取成功,则获取定位信息dwRet = GPSGetPosition(s_hGPS_Device, &gps_Position, MAX_AGE , 0);if(gps_Position.dblLongitude!=0){//p_timeStr=GetTodayTime(timeS);GetTodayTime(timeS);wsprintf(msg, L"%s: %.2d/.2%d,%f,%f\n",timeS,gps_Position.dwSatelliteCount ,gps_Position.dwSatellite sInView,gps_Position.dblLongitude, gps_Position.dblLatitude);//MessageBox(NULL, msg, L"GpsState", 0);//WriteToLog(msg);fwprintf(logfd, L"%s",msg);}}break;case WAIT_OBJECT_0 + 2: //结束线程事件,关闭GPS设备GPSCloseDevice(s_hGPS_Device);return 1;default:break;}//获取间断时间Sleep(MAX_WAIT);}fclose(log);return 0;}int _tmain(int argc, _TCHAR* argv[]){logfd = fopen("\\GPS.txt","a+");if (logfd == NULL) return -1;DWORD m_dwThreadID; //创建线程HANDLE m_hThread = CreateThread(NULL, NULL, GPSThreadProc, NULL, NULL, &m_dwThreadID);GPSThreadProc(NULL);fclose(logfd);return 0;}。
完全手册 51单片机C语言开发详解系列之第13章 综合实例――GPS接收机

13.4.1 KS0713简介
KS0713是一款集成的图形点阵LCD液晶驱动器,具有65 个公共端和132字段的液晶驱动电路。KS0713能够直接 与单片机进行连接使用,通信接口包括串行和并行接口。 KS0713内置了一块on-chip显示数据RAM,大小为 65×132,因此处理器只需要更改KS0713内置RAM的内 容即可以更改液晶的现实内容,而不需要实时刷新,因 此给显示带来极大的灵活性与便利。
13.4.9 KS0713的控制指令
单片机通过调用KS0713的控制指令间接地控制LCD液晶屏的显示、开关、 亮度以及内存中的数据,如图所示,KS0713共有24条不同的指令。这些指 令可以分为以下几个部分。
13.4.10 读显示数据指令Read Display Data
该指令读取当前地址的一个8位字节数据,该指令只在 KS0713的并行接口模式下有效,此时RS和RW引脚均为 高,如图所示。
13.4 GPS接收机显示终端——点阵型LCD液晶
GPS收发器接收GPS定位信号,经过AT89S51进行解码处理后,需要显示 给最终用户,用于定位、导航或者测量使用。这即是GPS接收机的人机交 互界面,本章采用了点阵型LCD液晶屏作为GPS接收机的最终显示设备。 点阵型LCD液晶屏具有以下一些优点: 耗电量低; 分辨率高; 接口灵活,方便各型号单片机使用。 显示界面灵活;
13.3.2 定位信息GPGGA帧
GPGGA是GPS定位信息帧,包含了GPS卫星时间、位置 以及确定数据需要的其他参数,如可用卫星数等等。 GPGGA的格式定义如下。 $GPGGA,hhmmss.ss,Latitude,N,Longitude,E,FS,NoSV,HD OP,msl,m,Altref,m,DiffAge,DiffStation*cs<CR><LF>
C语言计算GPS卫星位置

C语言计算GPS卫星位置GPS(全球定位系统)是一种利用卫星定位来确定全球地理位置的技术。
GPS系统由一组卫星和地面接收器组成,可以帮助我们在地球上的任何位置确定自己的准确位置。
在C语言中,我们可以利用一些数学和物理公式来计算GPS卫星位置。
首先,我们需要了解GPS系统的原理。
GPS卫星运行在地球轨道上,同时向地球发送信号。
地面接收器接收到卫星发出的信号,并通过计算信号的距离和时间来确定自身的位置。
计算GPS卫星位置的关键是测量信号的传播时间。
当接收器接收到来自至少4个不同卫星的信号时,我们可以使用以下公式来计算GPS卫星的位置:速度=距离/时间由于信号的传播速度恒定(大约为光速),我们可以知道信号的传播时间等于距离与速度的比。
在C语言中,我们可以使用以下代码计算GPS卫星的位置:```c#include <stdio.h>#include <math.h>typedef structdouble x;double y;double z;} Point3D;Point3D calculateSatellitePosition(double distance, double latitude, double longitude, double altitude)Point3D position;position.x = (altitude + distance) * cos(E) * cos(longitude);position.y = (altitude + distance) * cos(E) * sin(longitude);return position;int maidouble latitude = 37.7749; // 纬度(假设)double longitude = -122.4194; // 经度(假设)double altitude = 0.0; // 海拔(假设)Point3D satellitePosition =calculateSatellitePosition(distance, latitude, longitude, altitude);printf("GPS卫星位置:(x=%.2f, y=%.2f, z=%.2f)\n", satellitePosition.x, satellitePosition.y, satellitePosition.z);return 0;```在这段代码中,我们首先定义了光速的常量。
vc++环境下GPS导航应用

摘要随着科学技术的快速发展,GPS、GIS、电子地图等技术日益成熟并且开始紧密结合起来,促使了GPS/GIS导航服务业的产生。
在这个背景下,GPS/GIS导航电子地图的应用研究成为了许多科研工作者关注的焦点,也成为了许多公司和企业日益竞争的领域。
简单来说,GPS提供快速的定位信息,然后结合导航电子地图给用户提供丰富全面的地理信息如:交通路线选择、路况信息、相关的公共服务设施等。
在这方面,国外的应用技术都己经相对成熟,而国内由于技术、经济等原因,尚处于初级发展阶段,因此具有很大的市场潜力,研究意义十分重大。
目前国内外的学者在GPS车载定位导航和个人手机导航方面都做了深入的研究。
本文在参阅大量国内外相关文献资料的基础上,结合GPS定位导航的实际应用,本文主要介绍了GPS系统的工作原理和组成,并对定位数据坐标系变换的相关问题进行了深入的探讨。
论述了MapInfo地理信息软件的三种开发模式,并详尽阐述了本课题用到的基于Map 组件的开发模式。
接着,在详细的分析了导航电子地图的数据结构和组织结构后,针对连云港部分地区进行了导航电子地图的设计和制作。
本文对要开发的GPS导航电子地图系统进行了总体模块的设计,并说明了该软件要实现的主要功能。
在vc++6.0环境下基于MaPX 控件和MSC0mm控件实现了该软件系统的功能,主要包括电子地图的GIS功能如缩放、漫游、图层控制、折线距离计算等和GPS定位功能,实现了GPS定位信息在电子地图上的实时显示。
为了提高GPS导航电子地图系统的定位精度,分析了传统的垂直投影匹配算法,并在此基础上对其进行了改进,阐述了改进后的垂直投影匹配算法的原理,在综合了以上情况后,提出了一种几何和算术相结合的地图匹配算法,证明了的确能够极大的提高GPS导航定位系统的精度。
最后,总结了本文所做的工作,分析了论文中存在的问题及需要完善的地方。
关键词:GPS 电子地图Mapx MSComm 地图匹配ABSTRACTWith the rapid development of science and technology,GPS、GIS、electronic map and othertechnologies become more sophisticated and began to work closely together ,which Prompted the GPS/GIS navigation services Production .In this context,GPS/GIS application of navigation electronic map has become the focus of many researchers,but also a number of companies and enterprises become increasingly competitive in this field in simple terms ,GPS Provides fast Positioning information ,and then combined with navigation electronic map to Provide users with a comprehensive set of geographic information such as: traffic routing ,traffic information, related Public service facilities . Due to technical,economic and other reasons ,is still in the initial stages of development, it has great market Potential ,research is of great significance. In this regard,foreign technology and applications have been relatively mature, and domestic In this Paper,referring to the large number of domestic and foreign on the basis of Relevant literature ,combined with GPS positioning and navigation of the actual application,from the GPS navigation map of the study and application of current situation ,it describes the significance of this research ,Next ,it introduces the GPS system works and composition ,and location data related to coordinate system transformation conducted in-depth discussion .Then using this topic MapX component- based development model ,in the detailed analysis of the navigation map data structure and the organizational structure for Lian Yungang some areas of the navigation electronic map design and Production .Next , to develop the GPS navigation map system of the overall module design ,it describes the software to achieve the main function .Then in VC++6.0 environment based on MaPX control and MSComm control it implements a software system functions ,including functions such as GIS electronic map scale ,roaming ,layer control ,line distance calculation ,and GPS Positioning capability to enable a GPS Positioning Information on the electronic map in real time .In order to improve Positioning accuracy of the GPS navigation map system , analysis of the traditional vertical projection matching algorithm theory is given ,and being improved on the Basis of it .The improved vertical Projection matching algorithm theory is given ,after the combination of the above ,a combination of geometric and arithmetic map-matching algorithm is given and simulation experiments show it can indeed greatly improve the accuracy of GPS navigation and Positioning system.Finally,this paper summarizes the work done and analyzes the Problems of the paper andwhat to be Perfected.Key Words : GPS GIS electronic map MaPX MSComm map matching;目录第1章绪论 (5)1. 1 引言 (5)1. 2 国内外发展状况 (6)1. 3 当前ITS的主要研究课题 (8)1. 4选题的背景和意义 (9)第2章 GPS组成原理及导航电子地图的制作 (12)2. 1 GPS工作原理 (12)2. 1. 1测边交会法 (12)2. 1. 2双曲线定位 (13)2. 1. 3多普勒定位 (14)2. 2 GPS系统组成和定位流程 (15)2. 2. 1 GPS系统组成 (16)2. 2. 2 GPS系统的特点 (19)2. 2. 3 GPS系统的主要用途 (19)2. 2. 4 GPS接受器定位流程 (19)2. 3坐标系介绍及坐标转换问题 (19)2. 3. 1 坐标系介绍 (20)2. 3. 2关于定位数据坐标转换的问题 (21)2. 3. 3坐标转换 (22)2. 4 导航电子地图的制作 (23)2. 4. 1导航电子地图及其特点 (23)2. 4. 2导航电子地图的数据组成及组织结构 (24)2. 4. 3 Mapinfo产品及其开发模式简介 (26)2. 4. 4导航电子地图的制作 (28)2. 4. 5 GPS导航电子地图生产中的质量控制问题 (28)2. 4. 6 导航电子地图的图层控制与管理 (30)第3章GPS导航电子地图的软件系统设计 (31)3. 1系统开发环境概述显示器—PHILIPS (31)3. 1. 1硬件环境 (31)3. 1. 2软件环境 (32)3. 2系统设计的总体规划 (33)3. 2. 1系统的总体框架 (33)3. 2. 2系统的模块结构 (33)3. 2. 3软件系统主要功能 (35)第4章VC环境下基于MapX和MSComm控件的GPS导航系统的实现 (35)4. 1基于MFC的软件界面设计 (35)4. 1. 1 VC 6.0的特点 (35)4. 1. 2 VC应用程序的设计方法 (35)4. 1. 3应用程序框架生成及控件的创建 (36)4. 2基于MapX控件的基本GIS功能的实现 (38)4. 2. 1 MapX控件的介绍 (39)4. 2. 2电子地图基本GIS功能的实现 (41)4. 3基于MSC0mm控件的vC串口通信模块的实现 (48)4. 3. 1串行通信的一般步骤 (49)4. 3. 2 MSComm控件介绍 (50)4. 3. 3 VC++6. 0环境下MSComm控件的使用介绍 (50)4. 4 GPS数据处理模块的实现 (55)4. 4. 1GPS导航数据的格式 (55)4. 4. 2 GPS导航数据的提取 (57)4. 4. 3定位数据在电子地图上的实时显示 (60)第5章 GPS数据与电子地图数据匹配算法的研究 (62)5. 1研究地图匹配算法的意义 (62)5. 2地图匹配的基本原理和算法 (63)5. 2. 1地图匹配的基本原理 (63)5. 2. 2传统的垂直投影匹配算法 (64)5. 3改进的垂直投影匹配算法 (64)5. 4一种几何与算术相结合的地图匹配算法 (66)5. 5常用的地图匹配算法简介 (68)5. 5. 1最短距离法 (68)5. 5. 2基于曲线拟合的地图匹配 (68)5. 5. 3基于卡尔曼滤波的地图匹配算法 (68)5. 5. 4基于模糊逻辑的地图匹配算法 (69)5. 6本章小结 (69)结论 (70)参考文献 (71)第1章绪论1. 1 引言导航是引导某一设备,从指定航线从一点运动到另一点的方法。
利用C语言实现手持GPS航点的批量输入

( 2 )命名 空间 ,主 要用来 作为 一种 区别其他
X M L文 件 标 签 的 标 志 ; ( 3 )元 数 据 信 息 ,描 述 该 文 档 所 创 建 的时 间 以 及航点坐标范围:
d a t a , i mp l e me n t s t h e wa y p o i n t d a t a b a t c h i n p u t , a n d i mp r o v e s
h
图 1包含航点 的最小 G P X文件
在这 五个部分 中,X M L 序言 、命 名空间以及元
数据 信 息 可 以 不 用 改 动 , 直 接 参 照模 板 也 可 以 使 . E f j 。
在航 点信息部分 ,这里 只关注航 点部 分,忽略掉航 迹 、航线等 。一 个航 点信 息包括 经纬度 ( W G S 一 8 4坐 标) 、航 点名称 、航 点符号、创 建时 间等,在文件末 尾 附上 结 束 符 ( / g p x ) 表示文件结束 。
S一 8 4 C O Or di na t e
等信 息 ;
( 5 )结束符,文件的结束标志 。
引 言
目前,手 持 G P S接收机在测绘 、物探 等勘 察工 作 中得 到了广泛的应用 ,已经成为 了野外勘察工 作 的常用工 具。手持 G P S轻巧方便 ,其定位 精度达 到
2 ~5 m 的水 平 ,在 定 位 、导 航 等 方 面 深 受 野 外 勘 察
为野 外勘察 人员的常用工具。本文通过 C语言编程来处理
W G S 8 4坐标航 点数据 ,实现了航 点数据 的批 量输 入,提高
了手 持 G P S的使用效率。
式 )的缩写。G P X交换格 式文件 是 G P S设备 中的地 图 信 息 格 式 ,主 要 用 来 描 写 和 保 存地 理 数 据 信 息 。
c语言gps课程设计

c语言 gps课程设计一、教学目标本课程的目标是让学生掌握C语言在GPS领域的应用。
通过本课程的学习,学生将能够:1.理解GPS系统的基本原理和工作流程。
2.掌握C语言的基本语法和编程技巧。
3.能够使用C语言进行GPS数据的采集、解析和处理。
4.能够利用C语言实现简单的GPS导航功能。
二、教学内容本课程的教学内容主要包括以下几个部分:1.GPS系统的基本原理和工作流程。
2.C语言的基本语法和编程技巧。
3.GPS数据的采集、解析和处理。
4.GPS导航功能的实现。
三、教学方法为了达到本课程的教学目标,我们将采用多种教学方法,包括:1.讲授法:用于讲解GPS系统的基本原理和工作流程,以及C语言的基本语法和编程技巧。
2.案例分析法:通过分析具体的GPS应用案例,让学生了解GPS技术的实际应用。
3.实验法:通过实验让学生亲手操作,掌握GPS数据的采集、解析和处理方法,以及实现简单的导航功能。
四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用合适的C语言和GPS相关教材,为学生提供理论学习的参考。
2.参考书:提供相关的参考书籍,拓展学生的知识面。
3.多媒体资料:制作课件和视频资料,直观地展示GPS系统和C语言的相关内容。
4.实验设备:准备GPS接收器、计算机等实验设备,让学生进行实际操作。
五、教学评估为了全面、客观地评估学生在C语言GPS课程中的学习成果,我们将采取以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现来评估其学习态度和理解程度。
2.作业:布置与课程内容相关的编程作业,评估学生对C语言编程和GPS应用的掌握情况。
3.考试:定期进行理论知识考试和编程实践考试,全面评估学生的知识掌握和实际应用能力。
4.项目报告:要求学生完成一个GPS相关的编程项目,通过项目报告评估学生的综合应用能力。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材和大纲进行,确保覆盖所有重要知识点。
GPS-GPZDA数据解析C语言

这是一种使用没有在标准下预定义的特殊内容的方法。它通常的格式为:$PmmmA,df1,df2,....,[CR][LF]P说明是属性内容,mmm定义为厂商信息代码,A(A-Z)表明信息类型。
NMEA-0183协议定义的语句非常的多,主要有$GPGLL、 $GPGGA、$GPVTG、$GPZDA等。因为本次课题我们需要使用GPS-GPZDA进行数据解析所以我们只介绍GPZDA标准格式的样式。
2.3.2
查询的标准格式为:$ttllQ,sss,[CR][LF]
前面两个字符表示请求者的信息源的识别码,后面两个字符是被查询设备的识别码,最后一个字符说明这是一个查询的信息。紧跟着的字符(SSS)包含了三个字的被查询内容的记忆信息。例如: $CCGPQ,ZDA[CR][LF] “CC”说明计算机正从“GP”这个设备查询ZDA中的内容。GPS将会每隔1秒发送内容直到有新的请求。
char chhour[5]={'\0'};
char chmin[5]={'\0'};
char chsec[8]={'\0'};
char chsum[10]={'\0'};
char afterch[128]={'\0'};
int i,j,n,m; /*定义并初始化一些数组,指针,整型变量等用于后续程序使用*/
通过这次课程设计我们可以了解,如何用GPZDA解析GPS的时间信号,在计算机上输出普通用户所能理解的语句,让用户能够在时间信息这方面更加精确地得到信息,给用户提供更可靠的更高水准的服务。
第一章
GPS全球卫星定位系统由21颗工作卫星和3颗备用卫星组成。它们分布在6个等间距的轨道平面上,每个轨道面上有4颗工作卫星。GPS能覆盖全球,能够连续、实时、隐蔽地定位,一次定位时间仅几秒到十几秒,用户不发射任何电磁信号,只要接受卫星导航信号即可定位,所以可全天候昼夜作业。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GPS模拟# include <iostream># include <fstream># include <math.h>using namespace std;ifstream fin ("1.txt");//ofstream fout ("data_out.txt");// 1 2 3 4double x[5] = {-1, 0, 300, 0, 300};double y[5] = {-1, 450, 450, 0, 0};double t[5];double A, B, D,c = 2982000, p, r;double pi = 3.141592653;double xx, yy;//三角形算法void cal (int sign, double t1, double t2, double x1, double y1, double x2, double y2, double px, double py){double tt1 = c * t1, tt2 = c * t2;double q, ac;A = x2 * (x1*x1 + y1*y1 - tt1*tt1) - x1 * (x2*x2 + y2*y2 - tt2*tt2);B = y2 * (x1*x1 + y1*y1 - tt1*tt1) - y1 * (x2*x2 + y2*y2 - tt2*tt2);D = tt1 * (x2*x2 + y2*y2 - tt2*tt2) - tt2 * (x1*x1 + y1*y1 - tt1*tt1);q = atan (B / A);ac = acos (D / sqrt (A*A + B*B));if (sign > 0)p = q + ac;elsep = q - ac;r = (x1*x1 + y1*y1 - tt1*tt1) / (2 * (x1 * cos (p) + y1 * sin (p) + tt1));xx = cos (p) * r;yy = sin (p) * r;cout << xx + px << endl << yy + py<< endl << endl;}int main (){int i, j, k;while (fin >> t[1]){t[1] /= 1e6;for (int h = 2; h < 5; h++){fin >> t[h];t[h] /= 1e6;}for (int h = 1; h < 5; h++)if (fabs (t[h] - 0) < 1e-6){switch (h){case 1:cal (-1, t[2], t[4], 300, 0, 300, -450, 0, 450);break;case 2: cal (-1, t[1], t[3], -300, 0, -300, -450,300, 450);break;case 3: cal (1, t[1], t[2], 0, 450, 300, 450, 0, 0);break;case 4: cal (1, t[1], t[2], -300, 450, 0, 450, 300, 0);break;}break;}}system ("pause");return 0;}声源定位#include <iostream>#include <cmath>using namespace std;#define Max 50int N=10;double xi[10];double yi[10];double ti[10][3];double det(double a[Max][Max],int n){int i,j,start;double k,temp,result=1;for(start=0;start<=n-2;start++){i=1;while(a[start][start]==0&&start+i<=n-1){for(j=start;j<=n-1;j++){temp=-1*a[start][j];a[start][j]=a[start+i][j];a[start+i][j]=temp;}i++;}if(start+i==n) continue;for(i=start+1;i<=n-1;i++){k=a[i][start]/a[start][start];for(j=start;j<=n-1;j++)a[i][j]=a[i][j]-k*a[start][j];}}for(i=0;i<=n-1;i++)result*=a[i][i];return result;}int equalation(double a[Max][Max+1],double r[Max],int n){double det(double a[Max][Max],int n);double det0[Max][Max],det1[Max][Max];int i,j,k;for(i=0;i<=n-1;i++)for(j=0;j<=n-1;j++)det0[i][j]=a[i][j];if(det(det0,n)==0) return 0;for(k=0;k<=n-1;k++){for(i=0;i<=n-1;i++)for(j=0;j<=n-1;j++){det0[i][j]=a[i][j];det1[i][j]=a[i][j];}for(i=0;i<=n-1;i++)det1[i][k]=a[i][n];r[k]=det(det1,n)/det(det0,n);}return 1;}double sqr(double x){return x*x;}double g(double x,double y,double c,double xi,double yi,double ti) {return sqr(xi-x)+sqr(yi-y)-sqr(c*ti);}double fx(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*(xi[i]-x);return sum;}double fy(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*(yi[i]-y);return sum;}double fc(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*sqr(ti[i][k-1]);return sum;}double fxx(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*sqr(xi[i]-x)-g(x,y,c,xi[i],yi[i],ti[i][k-1]);return sum;}double fxy(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*(yi[i]-y)*(xi[i]-x);return sum;}double fxc(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*c*sqr(ti[i][k-1])*(xi[i]-x);return sum;}double fyx(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*(xi[i]-x)*(yi[i]-y);return sum;}double fyy(double x,double y,double c,int k){int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*sqr(yi[i]-y)-g(x,y,c,xi[i],yi[i],ti[i][k-1]);return sum;}double fyc(double x,double y,double c,int k) {int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*c*sqr(ti[i][k-1])*(yi[i]-y);return sum;}double fcx(double x,double y,double c,int k) {int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*(xi[i]-x)*sqr(ti[i][k-1]);return sum;}double fcy(double x,double y,double c,int k) {int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*(yi[i]-y)*sqr(ti[i][k-1]);return sum;}double fcc(double x,double y,double c,int k) {int i;double sum=0;for (i=0;i<=N-1;i++)sum=sum-2*c*sqr(sqr(ti[i][k-1]));return sum;}int main(){int i=0,k;double x,y,c,x0,y0,c0;double a[Max][Max+1],r[Max];freopen ("1.txt", "r", stdin);freopen ("1_out.txt", "w", stdout);for (i=0;i<=9;i++){cin>>xi[i]>>yi[i];xi[i] /= 10;yi[i] /= 10;cin>>ti[i][0]>>ti[i][1]>>ti[i][2];}for(k=1;k<=3;k++){cin>>x>>y;c=0.2;do{x0=x;y0=y;c0=c;i++;a[0][0]=fxx(x,y,c,k);a[0][1]=fxy(x,y,c,k);a[0][2]=fxc(x,y,c,k);a[1][0]=fyx(x,y,c,k);a[1][1]=fyy(x,y,c,k);a[1][2]=fyc(x,y,c,k);a[2][0]=fcx(x,y,c,k);a[2][1]=fcy(x,y,c,k);a[2][2]=fcc(x,y,c,k);a[0][3]=x*a[0][0]+y*a[0][1]+c*a[0][2]-fx(x,y,c,k);a[1][3]=x*a[1][0]+y*a[1][1]+c*a[1][2]-fy(x,y,c,k);a[2][3]=x*a[2][0]+y*a[2][1]+c*a[2][2]-fc(x,y,c,k);if(equalation(a,r,3)==0){cout<<"第"<<k<<"个用户的坐标求解错误,请降低精度!"<<endl;return 0;}x=r[0];y=r[1];c=r[2];}while(abs(x-x0)+abs(y-y0)+abs(c-c0)>=1e-6);cout<<"第"<<k<<"个用户的坐标为:"<<endl<<"x="<<x<<"cm"<<endl<<"y="<<y<<"cm"<<endl<<"参考波速为:c="<<c*1e4<<"m/s"<<endl;}getchar();return 0; }。