1、单向后方交会实验报告C单向后方交会实验报告C+ 实验报告 班级:测绘一班 学号: 日期:2016.5.5 目录 一、计算原理 . 3 二、算法流程 . 4 三、源程序 . 5 四、计算结果 . 13 五、结果分析 . 13 六、心得体会 . 13 一、计算原理 已知条件 摄影机主距f=153.24mm,x0=0.01mm,y0=0.02mm, 像片比例尺为1:40000,有四对点的像点坐标与相应的地面坐标如下表。 以单像空间后方交会方法,求解该像片的外方位元素。 二、算法流程 (1)获取已知数据。从航摄资料中差取平均航高与摄影机主距;获取控制点的地面测量坐标并转换为地面摄影坐标。 (2)量测控
2、制点的像点坐标并作系统误差改正。 (3)确定未知数的初始值。在竖直摄影且地面控制点大体对称分布的情况下,按如下方法确定初始值,即 X0SX?,Yn0SY?,Zn0 S?mf?1?Z n ?0?0?0?0 (4)用三个角元素的初始值按下式,计算各个方向余弦值,组成旋转矩阵R a1?cos?cos?sin?sin?sin?a2?cos?sin?sin?sin?cos?a3?sin?cos?b1?cos?sin?b2?cos?cos? b3?sin? c1?sin?cos?cos?sin?sin?c2?sin?sin? ?cos?sin?cos?c3?cos?cos? (5)逐点计算像点坐标的近似值
3、。利用未知数的近似值和控制点的地面坐标;带入共线方程式,逐点近似像点坐标的近似值(x)、(y)。 (6)逐点计算误差方程式的系数和常数项,组成误差方程式。 (7)计算法方程的系数矩阵ATA和常数项ALL,组成法方程式。 (8) 解法方程,求得外方位元素的改正数dXS、dYS、dZS、d?、d?、d?。 (9)用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素的新值。 KK?1KKK?1K XS?XS?dXS,YSK?YSK?1?dYSK,ZS?ZS?dZS ?K?K?1?d?K,?K?K?1?d?K,?K?K?1?d?K (10)将求得的外方位元素改正数与规定的限差比较,若小于限差,则
4、迭代结束。 负责用新的近似值重复(4)-(9),直到满足要求为止。 用共线方程进行空间后方交会的程序框如图所示。 否 二源程序 /2014113214 徐福辉 #include<iostream> #include<fstream> #include<iomanip> using namespace std; const int n = 6; void inverse(double cnn); template<typename T1, typename T2>void transpose(T1*mat1, T2*mat2, int a, int
5、 b); template<typename T1, typename T2>void multi(T1*mat1, T2*mat2, T2 * result, int a, int b, int c); int main() double x42 = -0.08616, -0.06897, -0.05341, 0.08223, -0.01479, -0.07661, 0.01045, 0.06445 ; double X43 = 36589.41, 25273.32, 2195.17, 37631.08, 31324.51, 728.69, 39100.97, 24934.98,
6、 2386.50, 40426.54, 30319.81, 757.31 ; int i, j, m = 1;/n为迭代次数 double X06 = 0 ;/设定未知数(XS,YS,ZS, ,)初始值 double f = 0.15324;/摄影机主距f=153.24mm double a = 1 / 40000.0;/像片比例尺为1:40000 double R33 = 0 ;/初始化旋转矩阵R double dayue_x8 = 0 ;/用于存放像点估计值 double A86 = 0 ;/系数阵 double AT68 = 0 ;/A的转置矩阵 double L8 = 0 ;/存放常数
7、项 const double pi = 3.1415926535897932; double Asum66 = 0 ; double jieguo26 = 0 ; double jieguo168 = 0 ; double sumXYZ3 = 0 ; cout.precision(5); cout << 已知像点坐标为:n; for (i = 0; i<4; i+) for (j = 0; j<2; j+) cout << fixed; if (j = 0) cout << x << i + 1 << = <<
8、 setw(10) << xij << ; else cout << y << i + 1 << = << setw(10) << xij << endl; cout << 已知地面四个点的坐标为:n; for (i = 0; i<4; i+) for (j = 0; j<3; j+) if (j = 0) cout << X << i + 1 << = << Xij << ; else if (j = 1) cou
9、t << Y << i + 1 << = << Xij << ; else cout << Z << i + 1; cout << = ; cout << Xij << endl; cout << endl; for (j = 0; j<3; j+) for (i = 0; i<4; i+) sumXYZj += Xij; for (i = 0; i<2; i+) X0i = sumXYZi / 4;/X0,Y0初始化 X0i = 1 / a*f
10、 + sumXYZ2 / 4.0;/Z0初始化 do R00 = cos(X03)*cos(X05) - sin(X03)*sin(X04)*sin(X05); R01 = -cos(X03)*sin(X05) - sin(X03)*sin(X04)*cos(X05); R02 = -sin(X03)*cos(X04); R10 = cos(X04)*sin(X05); R11 = cos(X04)*cos(X05); R12 = -sin(X04); R20 = sin(X03)*cos(X05) + cos(X03)*sin(X04)*sin(X05); R21 = -sin(X03)*s
11、in(X05) + cos(X03)*sin(X04)*cos(X05); R22 = cos(X03)*cos(X04); /第一个像点的估计值,其坐标位于X00,X01,X02 dayue_x0 = -f*(R00 * (X00 - X00) + R10 * (X01 - X01) + R20 * (X02 - X02) / (R02 * (X00 - X00) + R12 * (X01 - X01) + R22 * (X02 - X02); dayue_x1 = -f*(R01 * (X00 - X00) + R11 * (X01 - X01) + R21 * (X02 - X02) /
12、 (R02 * (X00 - X00) + R12 * (X01 - X01) + R22 * (X02 - X02); /第二个像点的估计值,其坐标位于X10,X11,X12 dayue_x2 = -f*(R00 * (X10 - X00) + R10 * (X11 - X01) + R20 * (X12 - X02) / (R02 * (X10 - X00) + R12 * (X11 - X01) + R22 * (X12 - X02); dayue_x3 = -f*(R01 * (X10 - X00) + R11 * (X11 - X01) + R21 * (X12 - X02) / (
13、R02 * (X10 - X00) + R12 * (X11 - X01) + R22 * (X12 - X02); /第三个像点的估计值,其坐标位于X20,X21,X22 dayue_x4 = -f*(R00 * (X20 - X00) + R10 * (X21 - X01) + R20 * (X22 - X02) / (R02 * (X20 - X00) + R12 * (X21 - X01) + R22 * (X22 - X02); dayue_x5 = -f*(R01 * (X20 - X00) + R11 * (X21 - X01) + R21 * (X22 - X02) / (R02
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1