📄 test.cpp
字号:
#include<iostream>
#include<math.h>
using namespace std;
const double c = 298200.0;
void getResult(double x1,double y1, double t1,double x2,double y2,double t2,int flag);
int main()
{
cout<<"x坐标"<<' '<<"y坐标"<<endl;
//计算x和y的坐标值,一共9组数据
getResult(30.0, 0.0, 51.1, 0.0, -45.0, 96.5, 1);
getResult(30.0, 0.0, 29.3, 0.0, -45.0, 93.1, 1);
getResult(30.0, 0.0, 44.4, 0.0, -45.0, 73.2, 1);
getResult(-30.0, 0.0, 49.1, -30.0, -45.0, 123.4, 2);
getResult(-30.0, 0.0, 23.0, -30.0, -45.0, 106.4, 2);
getResult(-30.0, 0.0, 48.7, -30.0, -45.0, 105.2, 2);
getResult(0.0, 45.0, 101.0, 30.0, 45.0, 129.0, 3);
getResult(0.0, 45.0, 74.6, 30.0, 45.0, 101.5, 3);
getResult(0.0, 45.0, 88.3, 30.0, 45.0, 104.9, 3);
return 0;
}
/*
(x1,y1),(x2,y2)已知定点的坐标,flag为显示时间为0的定点的序号,最后,根据flag的不同值,进行坐标交换,换回以s3为坐标原点的坐标值,显示声源的x,y坐标
*/
void getResult(double x1,double y1, double t1,double x2,double y2,double t2,int flag)
{
double d1 = c*t1 / 1000000.0;
double d2 = c*t2 / 1000000.0;
double var1 = x1*x1 + y1*y1 - d1*d1;
double var2 = x2*x2 + y2*y2 - d2*d2;
double A = x2*var1 - x1*var2;
double B = y2*var1 - y1*var2;
double D = d1*var2 - d2*var1;
double Fi = atan(B/A);
double mid_R = acos(D/sqrt(A*A+B*B));
double r;
/*
根据flag的不同值,进行坐标变换,换回以s3为坐标原点的坐标系,显示声源的x,y坐标
*/
if(flag == 2)
{
r = var1 / (2.0 * (x1*cos(Fi-mid_R) + y1*sin(Fi-mid_R) + d1));
cout<<30.0+r*cos(Fi-mid_R)<<' '<<r*sin(Fi-mid_R)+45.0<<endl;
}
else if(flag == 3)
{
r = var1 / (2.0 * (x1*cos(Fi+mid_R) + y1*sin(Fi+mid_R) + d1));
cout<< r*cos(Fi+mid_R)<<' '<<r*sin(Fi+mid_R)<<endl;
}
else
{
r = var1 / (2.0 * (x1*cos(Fi-mid_R) + y1*sin(Fi-mid_R) + d1));
cout<< r*cos(Fi-mid_R)<<' '<<r*sin(Fi-mid_R)+45.0 <<endl;
}
}
//运行结果如下:
/*
x坐标 y坐标
6.14286 37.3404
8.81791 35.6321
7.1493 36.4197
22.9282 39.5571
18.6228 40.0254
24.0142 35.3447
3.26622 7.15617
4.76157 11.0523
8.33742 6.02512
*/
/*
误差分析:
由于是操作板上的刻度有磨损,导致坐标记录时会产生微小误差。又由于机器的电源不太稳定,因而又有系统误差,致使测量结果有微小误差
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -