平面直角坐标系之间的转换程序说明
程序说明
程序名称:平面直角系之间的坐标转换
1. 程序基本功能与结构说明:
在实际的测量工作中,所采集道德数据一般是在不同的坐标系下得到的。在处理数据的时候,要先把数据换算到统一的坐标系下进行,因此,就需要进行坐标转化。本程序采用模块化的程序结构设计形式能够实现不同平面直角坐标系之间的坐标转换。
2. 程序结构各部分说明:
矩阵求逆函数说明:
int inverse(double C[][MAX],double B[][MAX],int n);
矩阵乘积函数说明:
void AXB(double A[][MAX],double B[][MAX],double C[][MAX],int m,int n,int k); void AXB(double a,double A[][MAX], double aA[][MAX],int m,int n);
void AXB(double A[][MAX],double B[][1],double C[][1],int m,int n);
矩阵转置函数说明:
void AT(double A[][MAX],double AH[][MAX],int m,int n);
void AT(double A[][1],double AH[][MAX],int m);
void AT(double A[][MAX],double AH[][1],int m);
平差计算相关函数:
void ATPA(double A[][MAX],double P[][MAX],double ATPA[][MAX],int m,int n);
void ATPL(double A[][MAX],double P[][MAX],double L[][1],double ATPL[][1],int m,int n); double VPV(double V[][1],double P[][MAX],int m);
矩阵显示:
void matdis(double A[][MAX],int n,int m);
void matdis(double A[][1],int n);
向文件输出矩阵:
void matout(double A[][MAX],int n,int m,ofstream out);
输出结果数据小数位数保留确定:
double setf(double a, int t)
平差结构体:
struct adj{
// adjustment model :
// V=AX-L P
// A[m][n], P[m][m], L[m][1]
char name[40]; // V=AX-L P
int m; // the number of observations
int n; // the number of unknown data
double A[MAX][MAX]; // paremater mat of unknown data
double P[MAX][MAX]; // observation weight mat
double l[MAX][1]; // fix data mat
double X[MAX][1]; // unknown data mat
double QXX[MAX][MAX];// coherance date mat
double m0; // unit weight error
double V[MAX][1];
int flag; // flag=1 means adjustment successfully
};
矩阵转化函数:
int inverse(double C[][MAX],double B[][MAX],int n)
坐标转换结构体:struct zh{}
点结构:struct pnt{}
参数结构:struct cnt{}
3. 数据格式与处理过程说明:
数据输入分两种:
(1)文件输入;在程序文件中建立一个数据文件,数据形式包括点名(已知点和未知点)和两个坐标系下同名点的坐标至少两组数据,最好是三组数据以上这样能更好地进行平差。其格式如:
BC 7 3
A 400 3000 840.604 7119.95
B 6000 3200 4040.7 11718.8
M 200 333 2853.67 5359.76
C 100 100
E 1000 3000
F 800 400
G 2000 1500
(2)键盘输入。根据提示输入便可以(注意:数据格式与文件输入一样)
如:
输入坐标转换的总体信息
输入总点数:
7
输入已知点个数:
3
输入已知点数据:
点名 0坐标系下的坐标x0,y0; 1坐标系下的坐标x1,y1;
A 400 3000 840.604 7119.95
B 6000 3200 4040.7 11718.8
M 200 333 2853.67 5359.76
输入未知点数据:
点名 0坐标系下的坐标x0,y0;:
C 100 100
E 1000 3000
F 800 400
G 2000 1500
回车便Ok 了
输出:自动保存发放乘系数阵.txt 文件ATPA :
3 0 6600 -6533
0 3 6533 6600
6600 6533 55550889 0
-6533 6600 0 55550889
A 矩阵(观测方程系数阵):
1 0 400 - 3000
0 1 3000 400
1 0 6000 -3200
0 1 3200 6000
1 0 200 -333
0 1 333 200
P 矩阵(单位阵)、:
1 … 0
1
. 1 .
. 1 .
1
0 … 1
L 矩阵(自由阵):
840.604 7119.95
4040.7 11718.8
2853.67 5359.76
转换参数矩阵列向量、x ’、y ’、P 、Q 。以及转换后的坐标矩阵: 2999.9937
4999.9998
0.6
0.7998
结果是保留4为小数的坐标矩阵数据:
x1' 坐标 y1' 坐标
2980.02 5139.98
1200.62 7599.82
3160.08 5879.84
3000.32 7499.6