收藏 分享(赏)

DLT 直接线性变换解法程序.doc

上传人:精品资料 文档编号:8591346 上传时间:2019-07-04 格式:DOC 页数:20 大小:224.50KB
下载 相关 举报
DLT 直接线性变换解法程序.doc_第1页
第1页 / 共20页
DLT 直接线性变换解法程序.doc_第2页
第2页 / 共20页
DLT 直接线性变换解法程序.doc_第3页
第3页 / 共20页
DLT 直接线性变换解法程序.doc_第4页
第4页 / 共20页
DLT 直接线性变换解法程序.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、DLT 直接线性变换解法程序介绍一、程序综合介绍:DLT 结算程序 程序功能介绍: 应用 6 个已知点计算左右片 l 系数;然后应用已经求得的 l 系数求解物方空间坐标系坐标程序名:SuYGDLT程序界面:程序界面有四个按钮,分别为读取文件,左片 l 系数计算,右片系数计算,物放坐标解算程序界面有四个编辑框,分别用来输出文件信息,左片 l 系数、右片 l 系数、以及无妨坐标结果截图如下程序使用介绍:必须先点击导入文件按钮,导入文件方可进行正确的计算,如果未导入文件就点击左片平差或右片平差或无妨坐标解算就会弹出如下对话框:读取数据后点击其它按钮进行其它计算。程序文件格式:数据文件分为两部分,Kn

2、ownPoint,UNKnownPoint,分别代表已知点信息和待求点信息当文件读取程序读到“KnownPoint”时开始读取已知点信息,已知点信息格式如下GCP1,1214.0000,1032.0000,1046.5180,1071.6652,9.201742,-9.672384,-2.726064分别代表点名、左片相片 X 坐标、左片相片 y 坐标、右片相片 x 坐标、右片相片 y 坐标 物方坐标 X、Y、Z;当文件读取到“END KnownPoint”时结束已知坐标的读取待求点信息类似:文件格式截图如下:程序运行结果与评估:本程序区 1-10 号点作为已知点计算 l 近似值 11-20

3、号点作为未知点解求其物方三维坐标;程序运行结果与所给参考值相似,应该可以证明其运算是正确的,运行结果截图如下:二、程序编程思想及相关代码程序编程思想及相关函数:本程序设计 DLTCalculation 类作为 l 系数结算主程序,其成员变量及成员函数与作用介绍如下:CSuLMatrix LL;/左片 L 系数矩阵CSuLMatrix RL;/右片 L 系数矩阵int m_iKnownPointCount;/已知点个数CControlPoint *m_pKnownPoint;/已知点int m_iUnKnownPointCount;/未知点个数CControlPoint *m_pUnKnownP

4、oint;/未知点public:CString LoadData(const CString/读取文件函数int ifLoda;/判断是否导入数据CString Datainfor;/文件信息存储CString *SplitString(CString str,char split, int /分割函数void LFormApproL(CSuLMatrix /计算左片 L 系数近似值void RFormApproL(CSuLMatrix /计算右片 L 系数近似值void FormLErrorEquations(CSuLMatrix LL,CMatrix /组成左片系数矩阵和常数项矩阵void

5、 LAdjust();/左片平差主函数void FormRErrorEquations(CSuLMatrix RL,CMatrix /组成右片系数矩阵和常数项矩阵void RAdjust();/右片平差主函数void Output(const CString/输出结果主程序void OutMatrixToFile(const CMatrix/输出矩阵总程序另外设计类 qianfangjiaohui 作为结算物放坐标解算主程序其成员变量与成员函数及其作用介绍如下:void FormApproCoor( DLTCalculation /计算无妨坐标近似值void FormErrorEquation

6、s(DLTCalculation /解求系数矩阵void Adjust(DLTCalculation /平差计算物放坐标程序详细代码粘贴如下:以下为类 DLTCalculation.cpp 文件详细内容:#include “StdAfx.h“#include “DLTCalculation.h“#include #include “SuLMatrix.h“DLTCalculation:DLTCalculation(void)ifLoda=0;DLTCalculation:DLTCalculation(void)CString* DLTCalculation:SplitString(CStrin

7、g str,char split, int /分割符位置int iNums = 0; /分割符的总数CString strTemp = str;CString strRight;/先计算子字符串的数量while (iPos != -1)iPos = strTemp.Find(split);if (iPos = -1)break;strRight = strTemp.Mid(iPos + 1, str.GetLength();strTemp = strRight;iNums+;if (iNums = 0) /没有找到分割符/子字符串数就是字符串本身iSubStrs = 1; return NUL

8、L;/子字符串数组iSubStrs = iNums + 1; /子串的数量 = 分割符数量+ 1CString* pStrSplit;pStrSplit = new CStringiSubStrs;strTemp = str;CString strLeft;for (int i = 0; i 0.01);*/void DLTCalculation:Output(const CStringCString strLine;setlocale(LC_ALL,“); if(!SF.Open(strFileName, CFile:modeCreate|CFile:modeWrite) return;/开

9、始写数据SF.WriteString(_T(“结果输出: n“);SF.WriteString(_T(“空间后方交汇n“);CMatrix LM(2*m_iKnownPointCount,12);CMatrix LW(2*m_iKnownPointCount,1);CMatrix LNbb(12,12);CMatrix LNvv(12,1);CMatrix LV(12,1);int Ln = 0;CString strputdata;double x0,y0;double A,B,C;double fx;double x00,y00;double A0,B0,C0;double fx0;dou

10、ble dfx;LFormApproL(LL);x00 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y00 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A0 = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l

11、3)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x00*x00;B0 = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-y00*y00;C0 = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x00*y00;fx0 = sqrt(

12、A0*B0-C0*C0)/B0);/*do*/FormLErrorEquations(LL,LM,LW);LNbb=(LM)*LM;LNvv=(LM)*LW;OutMatrixToFile(LM,SF);/*LV=LNbb.Inv();*/*LV=(LNbb.Inv()*LNvv;*/*LL.l1+=LV(0,0);LL.l2+=LV(1,0);LL.l3+=LV(2,0);LL.l4+=LV(3,0);LL.l5+=LV(4,0);LL.l6+=LV(5,0);LL.l7+=LV(6,0);LL.l8+=LV(7,0);LL.l9+=LV(8,0);LL.l10+=LV(9,0);LL.l1

13、1+=LV(10,0);x0 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y0 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l3)/(LL.l9 * LL.

14、l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*x0;B = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-y0*y0;C = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*y0;fx = sqrt(A*B-C*C)/B);dfx = fx - f

15、x0;fx0 = fx;Ln+;*/while(fabs(dfx)0.01);CString putdata;putdata.Format(_T(“%srn“),_T(“左片结果“);strputdata+=putdata;putdata.Format(_T(“%srn“),_T(“L 系数为:“);strputdata+=putdata;putdata.Format(_T(“%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn%s%.5frn“),_T(“l1 = “),LL.l1,_

16、T(“l2 = “),LL.l2,_T(“l3 = “),LL.l3,_T(“l4 = “),LL.l4,_T(“l5 = “),LL.l5,_T(“l6 = “),LL.l6,_T(“l7 = “),LL.l7,_T(“l8 = “),LL.l8,_T(“l9 = “),LL.l9,_T(“l10 = “),LL.l10,_T(“l11 = “),LL.l11);strputdata+=putdata;SF.WriteString(strputdata);/putdata.Format(_T(“%s%drn“),_T(“迭代次数为:“),Ln);/*strputdata+=putdata;*

17、/void DLTCalculation:RAdjust()/右片平差主函数CMatrix RM(2*m_iKnownPointCount,12);CMatrix RW(2*m_iKnownPointCount,1);CMatrix RNbb(12,12);CMatrix RNvv(12,1);CMatrix RV(12,1);int Rn = 0;CString strputdata;double x0,y0;double A,B,C;double fx;double x00,y00;double A0,B0,C0;double fx0;double dfx;RFormApproL(RL);

18、/x00 = (-1)*(RL.l1 * RL.l9 + RL.l2 * RL.l10 + RL.l3 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);/y00 = (-1)*(RL.l5 * RL.l9 + RL.l6 * RL.l10 + RL.l7 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);/A0 = (RL.l1 * RL.l1 + RL.l2 * RL.l2 + RL.l3 * RL.l3)/(RL.l9 * RL.l9 + R

19、L.l10 * RL.l10 + RL.l11 * RL.l11)-x00*x00;/B0 = (RL.l5 * RL.l5 + RL.l6 * RL.l6 + RL.l7 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-y00*y00;/C0 = (RL.l1 * RL.l5 + RL.l2 * RL.l6 + RL.l3 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x00*y00;/fx0 = sqrt(A0*B0-C0*C0)/B0);/

20、*do*/ FormRErrorEquations(RL,RM,RW);/ RNbb = (RM)*RM;/ RNvv = (RM)*RW;/* RV = (RNbb.Inv()*RNvv;*/ /RL.l1+=RV(0,0);RL.l2+=RV(1,0);RL.l3+=RV(2,0);RL.l4+=RV(3,0);/ /RL.l5+=RV(4,0);RL.l6+=RV(5,0);RL.l7+=RV(6,0);RL.l8+=RV(7,0);/ /RL.l9+=RV(8,0);RL.l10+=RV(9,0);RL.l11+=RV(10,0);x0 = (-1)*(RL.l1 * RL.l9 +

21、RL.l2 * RL.l10 + RL.l3 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);y0 = (-1)*(RL.l5 * RL.l9 + RL.l6 * RL.l10 + RL.l7 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);A = (RL.l1 * RL.l1 + RL.l2 * RL.l2 + RL.l3 * RL.l3)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)

22、-x0*x0;B = (RL.l5 * RL.l5 + RL.l6 * RL.l6 + RL.l7 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-y0*y0;C = (RL.l1 * RL.l5 + RL.l2 * RL.l6 + RL.l3 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x0*y0;/* fx = sqrt(A*B-C*C)/B);dfx = fx - fx0;fx0 = fx;Rn+;*/*while(abs(dfx)0.0

23、1);*/类 qianfangjiaohui 的 cpp 文件代码粘贴如下:#include “StdAfx.h“#include “qianfangjiaohui.h“qianfangjiaohui:qianfangjiaohui(void)qianfangjiaohui:qianfangjiaohui(void)void qianfangjiaohui:FormApproCoor(DLTCalculation CMatrix f(3,1);CMatrix X(3,1);for(int i=0;i1|fabs(d2)1|fabs(d3)1);*/实验所需 txt 文件粘贴如下:SuYongG

24、ang 01031206162015 05 01KnownPointKnownPointCount,10GCP1,1214.0000,1032.0000,1046.5180,1071.6652,9.201742,-9.672384,-2.726064GCP2,1378.0000,508.0000,1167.8218,541.4734,8.653967,-8.226455,-5.483531 GCP3,605.0000,1527.0000,391.3034,1573.4119,6.175121,-11.003152,0.227490GCP4,1468.0000,361.0000,1262.599

25、4,388.2626,9.004163,-7.857839,-6.448011GCP5,940.0000,1264.0000,719.0428,1310.4186,7.206690,-9.863228,-1.122442GCP6,1204.0000,563.0000,990.1780,606.6536,7.986264,-8.928340,-5.054990GCP7,554.0000,1158.0000,348.4338,1217.2070,5.888988,-11.267342,-1.584110GCP8,1972.0000,1455.0000,1781.7030,1481.7072,10.

26、951923,-5.749235,-0.276650GCP9,1013.0000,739.0000,797.4695,790.9252,7.321597,-9.658292,-3.954598GCP10,2814.0000,1057.0000,2745.6122,1035.4548,14.760180,-1.714839,-2.804178END KnownPointUnknownPointUnknownPointCount,10ID,Lx,Ly,Lz,Rx,Ry,Rz1,1411.0000,319.0000,1209.0579,350.27772,1495.0000,297.0000,129

27、6.0357,322.26193,1348.0000,475.0000,1140.2866,510.61094,2500.0000,717.0000,2380.9077,688.05625,342.0000,442.0000,165.1718,540.67196,2217.0000,954.0000,2059.9866,951.84407,1356.0000,578.0000,1147.8519,612.74348,1398.0000,574.0000,1190.8740,606.4662 9,1234.0000,1032.0000,1066.8420,1070.8535 10,1481.0000,577.0000, 1276.1857,604.2876 END UnknownPoint

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报