亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bachdlg.cpp

?? 攝影測量專業。實現單像后方交會以及立體像對的前方交會。以文件形式讀取控制點和像點坐標。
?? CPP
字號:
// BachDlg.cpp : 實現文件
//
/************************************************************************/
/* 調試很辛苦,尤其是由于這個矩陣類的特性,在MFC中不能直接顯示其中的數據
   所以還得在Win32控制臺下調試,用矩陣類中的PrintStdout()方法			*/
/************************************************************************/

#include "stdafx.h"
#include "BacAndFor.h"
#include "BachDlg.h"


// BachDlg 對話框

IMPLEMENT_DYNAMIC(BachDlg, CDialog)

BachDlg::BachDlg(CWnd* pParent /*=NULL*/)
	: CDialog(BachDlg::IDD, pParent)
{
	dXs=0;				//外方位元素增量初值
	dYs=0;
	dZs=0;
	dphi=0;
	domega=0;
	dkappa=0;

	phi=-1.6;			//外方位角元素初值
	omega=1.0;
	kappa=1.6;

	Xs=920;				//外方位線元素初值
	Ys=1300;
	Zs=1400;

	f=24.22;

	statusPic=FALSE;	//默認文件讀取狀態為假
	statusCon=FALSE;

}

BachDlg::~BachDlg()
{
}

void BachDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(BachDlg, CDialog)
	ON_BN_CLICKED(IDC_BUTTON_LOAD_PIC, &BachDlg::OnBnClickedButtonLoadPic)
	ON_BN_CLICKED(IDC_BUTTON_LOAD_CONTROL, &BachDlg::OnBnClickedButtonLoadControl)
	ON_BN_CLICKED(IDC_BUTTON_BACKCAL, &BachDlg::OnBnClickedButtonBackcal)
	ON_BN_CLICKED(IDC_BUTTON_SAVERES, &BachDlg::OnBnClickedButtonSaveres)
END_MESSAGE_MAP()


// BachDlg 消息處理程序

void BachDlg::OnBnClickedButtonLoadPic()
{
	CFileDialog fileDlg(TRUE);				// 打開文件對話框
	fileDlg.m_ofn.lpstrTitle="打開像點坐標文件";		//命名對話框標題
	fileDlg.m_ofn.lpstrFilter="Text File(*.txt)\0*.txt\0All Files\0(*.*)\0*.*\0\0";
	if (IDOK==fileDlg.DoModal())
	{
		statusPic=p_Pic.ReadFromFile(fileDlg.GetPathName());	//得到文件路徑及文件名并讀取文件,成功與否賦值給statusPic
		p=p_Pic;
	}

	if (statusPic)
	{
		MessageBox("文件讀取成功!");
	}
	else
	{
		MessageBox("文件讀取不成功!");
	}

}

void BachDlg::OnBnClickedButtonLoadControl()
{
	CFileDialog fileDlg(TRUE);				// 打開文件對話框
	fileDlg.m_ofn.lpstrTitle="打開控制點坐標文件";		//命名對話框標題
	fileDlg.m_ofn.lpstrFilter="Text File(*.txt)\0*.txt\0All Files\0(*.*)\0*.*\0\0";
	if (IDOK==fileDlg.DoModal())
	{
		statusCon=p_Con.ReadFromFile(fileDlg.GetPathName());	//得到文件路徑及文件名并讀取文件,成功與否賦值給statusPic
		P=p_Con;
	}

	if (statusCon)
	{
		MessageBox("文件讀取成功!");
		ptNum=p_Con.GetNrRows();									//計算點的個數

	}
	else
	{
		MessageBox("文件讀取不成功!");
	}

}

void BachDlg::OnBnClickedButtonBackcal()
{
	if (statusCon&statusPic)						//確保坐標點文件讀取以防異常
	{
		int m=0;									//迭代次數
		unsigned a,b;
		double v;								//三個角元素中的最大值v,及它的行列號a,b
		Matrix Res_Angle;						//提取三個角元素
		
		do
		{
			LeastCal();
			Res.ExtractSubMatrix(Res_Angle,3,0,5,0);//提取三個角元素
			Res_Angle.GetStats_MaxAbs(a,b,v);		//得到三個角元素中的最大值v,及它的行列號a,b
			m++;									//迭代次數加一
	
		}while(v>=0.01/206265);					// 迭代停止條件為最大的角元素小于0.01秒
	
		Rad2Dms();								//調用此函數的到角值的字符串
		
		CString str0;										//顯示結果在編輯框內
		str0.Format("%d",m);
		CString str1;
		str1.Format("%.6f",Xs);
		CString str2;
		str2.Format("%.6f",Ys);
		CString str3;
		str3.Format("%.6f",Zs);
/*		CString str4;
		str4.Format("%.6f",phi);
		CString str5;
		str5.Format("%.6f",omega);
		CString str6;
		str6.Format("%.6f",kappa);
*/	
		
		out="迭代次數:"+str0+"\r\nXs: "+str1+"\r\nYs: "+str2+"\r\nZs: "+str3+"\r\nφ: "+strPhi+ "\r\nω: "+strOmega+"\r\nκ: "+strKappa;
	
		GetDlgItem(IDC_EDIT_SHOW_BK)->SetWindowText(out);
	} 

	else
	{
		MessageBox("文件讀取不成功!");

	}
}

void BachDlg::CreateR()
{
	
	Matrix R(3,3);									//旋轉陣
	Matrix R1(3,3);									//旋轉陣分量
	Matrix R2(3,3);									//cos(phi)=11 sin(phi)=22 cos(omega)=33 sin(omega)=44  cos(kap)=55 sin(kappa)=66
	Matrix R3(3,3);
	R1="[11 0 -22;0 1 0;22 0 11]";					//不能直接像matlab那樣為矩陣賦值,
	R2="[1 0 0;0 33 -44;0 44 33]";					//有需要sin,cos運算的地方先隨便用個數代替,然后逐一賦值
	R3="[55 -66 0;66 55 0;0 0 1]";

	R1(0,0)=cos(phi);
	R1(0,2)=-sin(phi);
	R1(2,0)=sin(phi);
	R1(2,2)=cos(phi);

	R2(1,1)=cos(omega);
	R2(1,2)=-sin(omega);
	R2(2,1)=sin(omega);
	R2(2,2)=cos(omega);

	R3(0,0)=cos(kappa);
	R3(0,1)=-sin(kappa);
	R3(1,0)=sin(kappa);
	R3(1,1)=cos(kappa);


	R=R1*R2*R3;

	a1=R[0][0];
	a2=R[0][1];
	a3=R[0][2];

	b1=R[1][0];
	b2=R[1][1];
	b3=R[1][2];

	c1=R[2][0];
	c2=R[2][1];
	c3=R[2][2];

	R_G=R;
}

void BachDlg::CreateLum()
{
	int i;
	Matrix Lum_L(3*ptNum,1);
	Matrix temp;
	Matrix Ps(3,1);							//形成[Xs;Ys;Zs]這樣的矩陣
	Ps(0,0)=Xs;
	Ps(1,0)=Ys;
	Ps(2,0)=Zs;

	for (i=1;i<=ptNum;i++)
	{
		Matrix P_Sub;
		P.ExtractSubMatrix(P_Sub,i-1,1,i-1,3);		//將控制點P的子矩陣(即第i個點的坐標)賦給P_Sub
		P_Sub=P_Sub.T()-Ps;							//形成這樣的矩陣
		temp=R_G.T()*P_Sub;							//temp為當前點 R'*[X-Xs;Y-Ys;Z-Zs]結果
		Lum_L.InsertSubMatrix(temp,3*i-3,0);		//將所有點行成的Xbar,Ybar,Zbar累加在一起
	}	

	Lum=Lum_L;
//	Lum.PrintStdout();

}


/************************************************************************/
/* 此處特別注意,矩陣中某元素拿來運算時必須用[]引用,而不能用() 。
   例如Lum[3*i-1]不能寫成Lum(3*i-1),吃了大虧!
/************************************************************************/
void BachDlg::CreateB()
{
	int i;
	Matrix B(2*ptNum,6);
	double x,y;                            //像點坐標,局部變量,便于創建B矩陣
	for (i=1;i<=ptNum;i++)
	{
		x=p[i-1][1];
	    y=p[i-1][2];

		B(2*i-2,0)=1/Lum[3*i-1]*(a1*f+a3*x);
		B(2*i-2,1)=1/Lum[3*i-1]*(b1*f+b3*x);
		B(2*i-2,2)=1/Lum[3*i-1]*(c1*f+c3*x);
		B(2*i-2,3)=y*sin(omega)-(x/f*(x*cos(kappa)-y*sin(kappa))+f*cos(kappa))*cos(omega);
		B(2*i-2,4)=-f*sin(kappa)-x/f*(x*sin(kappa)+y*cos(kappa));
		B(2*i-2,5)=y;

		B(2*i-1,0)=1/Lum[3*i-1]*(a2*f+a3*y);
		B(2*i-1,1)=1/Lum[3*i-1]*(b2*f+b3*y);
		B(2*i-1,2)=1/Lum[3*i-1]*(c2*f+c3*y);
		B(2*i-1,3)=-x*sin(omega)-(y/f*(x*cos(kappa)-y*sin(kappa))-f*sin(kappa))*cos(omega);
		B(2*i-1,4)=-f*cos(kappa)-y/f*(x*sin(kappa)+y*cos(kappa));
		B(2*i-1,5)=-x;
	}
	Bcl=B;
}

void BachDlg::CreateL()
{
	Matrix l(2*ptNum,1);
	double x,y;

	for (int i=1;i<=ptNum;i++)
	{		
		x=p[i-1][1];
		y=p[i-1][2];

		l(2*i-2,0)=f*Lum[3*i-3]/Lum[3*i-1]+x;
		l(2*i-1,0)=f*Lum[3*i-2]/Lum[3*i-1]+y;
	}
	
	lcl=l;
}

void BachDlg::LeastCal()
{
	CreateR();								// 創建旋轉陣
	CreateLum();							//Xbar Ybar Zbar
	CreateB();                              //創建參數系數陣
	CreateL();                              //創建l陣

	
	Res=(Bcl.T()*Bcl).Inv()*Bcl.T()*lcl;	//解法方程
	dXs=Res[0];
	dYs=Res[1];
	dZs=Res[2];
	dphi=Res[3];
	domega=Res[4];
	dkappa=Res[5];

	Xs=Xs+dXs;
	Ys=Ys+dYs;
	Zs=Zs+dZs;
	phi=phi+dphi;
	omega=omega+domega;
	kappa=kappa+dkappa;
}

void BachDlg::Rad2Dms()
{
	double TT=acos(-1.0);							//Pi
	Deg_Phi=int(phi*180/TT);
	Min_Phi=int((phi*180/TT-Deg_Phi)*60);
	Sec_Phi=(((phi*180/TT-Deg_Phi)*60-Min_Phi)*60);
	
	Deg_Omega=int(omega*180/TT);
	Min_Omega=int((omega*180/TT-Deg_Omega)*60);
	Sec_Omega=(((omega*180/TT-Deg_Omega)*60-Min_Omega)*60);
	
	Deg_Kappa=int(kappa*180/TT);
	Min_Kappa=int((kappa*180/TT-Deg_Kappa)*60);
	Sec_Kappa=(((kappa*180/TT-Deg_Kappa)*60-Min_Kappa)*60);




	Min_Phi=abs(Min_Phi);
	Sec_Phi=abs(Sec_Phi);
	
	Min_Omega=abs(Min_Omega);
	Sec_Omega=abs(Sec_Omega);

	Min_Kappa=abs(Min_Kappa);
	Sec_Kappa=abs(Sec_Kappa);

	if (Sec_Phi==60.0)                 //解決分秒為60的問題
	{
		Sec_Phi=.0;
		Min_Phi+=1;
	}
	if (Min_Phi==60)
	{
		Min_Phi=0;
		if (Deg_Phi>=0)
		{
			Deg_Phi+=1;
		}
		else Deg_Phi-=1;
	}

	if (Sec_Omega==60.0)
	{
		Sec_Omega=.0;
		Min_Omega+=1;
	}
	if (Min_Omega==60)
	{
		Min_Omega=0;
		if (Deg_Omega>=0)
		{
			Deg_Omega+=1;
		}
		Deg_Omega-=1;
	}

	if (Sec_Kappa==60.0)                
	{
		Sec_Kappa=.0;
		Min_Kappa+=1;
	}
	if (Min_Kappa==60)
	{
		Min_Kappa=0;
		if (Deg_Kappa>=0)
		{
			Deg_Kappa+=1;
		}
		else Deg_Kappa-=1;
	}



	//b1=(char)B1+"°"+(char)B2+"'"+(char)B3+"'";
	//l1=L1+"°"+L2+"'"+L3+"'";
	CString c;
	
	strPhi.Format("%d",Deg_Phi);				//以字符串形式的Phi,Omega,Kappa
	strPhi+="°";
	c.Format(" %d",Min_Phi);
	strPhi+=c;
	strPhi+="′";
	c.Format(" %.6f",Sec_Phi);
	strPhi+=c;
	strPhi+="″";


	strOmega.Format("%d",Deg_Omega);
	strOmega+="°";
	c.Format(" %d",Min_Omega);
	strOmega+=c;
	strOmega+="′";
	c.Format(" %.6f",Sec_Omega);
	strOmega+=c;
	strOmega+="″";

	strKappa.Format("%d",Deg_Kappa);
	strKappa+="°";
	c.Format(" %d",Min_Kappa);
	strKappa+=c;
	strKappa+="′";
	c.Format(" %.6f",Sec_Kappa);
	strKappa+=c;
	strKappa+="″";
}


void BachDlg::OnBnClickedButtonSaveres()
{
	CFileDialog fileDlg(FALSE);				// 打開文件對話框
	fileDlg.m_ofn.lpstrTitle="保存外方位元素文件";		//命名對話框標題
	fileDlg.m_ofn.lpstrFilter="Text File(*.txt)\0*.txt\0All Files\0(*.*)\0*.*\0\0";
	fileDlg.m_ofn.lpstrDefExt="txt";
	if (IDOK==fileDlg.DoModal())
	{
		CFile file(fileDlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);	//創建一個文件,以寫入方式打開
		file.Write(out,(UINT)out.GetLength());									//將結果寫入到文件
		file.Close();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91九色02白丝porn| 色爱区综合激月婷婷| 国产精品电影一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 精品日韩成人av| av一区二区三区| 激情综合亚洲精品| 亚洲18色成人| 国产精品亲子乱子伦xxxx裸| 91精品国产色综合久久不卡蜜臀 | 国产女同性恋一区二区| 欧美男人的天堂一二区| 成av人片一区二区| 久久激情综合网| 亚洲成人一区二区在线观看| 国产日韩成人精品| 欧美一区二区国产| 91精品国产免费久久综合| 欧美亚日韩国产aⅴ精品中极品| 99视频一区二区| 国产suv精品一区二区883| 久久精品国产久精国产| 亚洲素人一区二区| 国产精品毛片大码女人| 国产视频一区在线播放| 久久精品亚洲一区二区三区浴池| 91精品国产综合久久精品| 久久99久久久欧美国产| 午夜精品成人在线| 日本欧美大码aⅴ在线播放| 亚洲成av人片一区二区| 午夜亚洲福利老司机| 调教+趴+乳夹+国产+精品| 亚洲综合成人在线| 日韩精品一二三区| 黄色日韩三级电影| 成人avav影音| 欧美日本乱大交xxxxx| 日韩欧美一二三四区| 欧美一区二区在线免费播放| 日韩欧美一区二区在线视频| 久久综合狠狠综合久久综合88| 久久蜜桃av一区二区天堂| 国产精品乱码一区二区三区软件 | 久久久久久久久久久久久久久99| 中文字幕第一区综合| 亚洲精选一二三| 国产一级精品在线| 欧美三区在线视频| 精品国产1区2区3区| 亚洲天堂免费在线观看视频| 视频一区欧美精品| 国产suv精品一区二区三区| 91成人网在线| 国产亚洲欧美中文| 手机精品视频在线观看| 成人夜色视频网站在线观看| 欧美二区乱c少妇| 亚洲欧美日韩一区| 国内精品不卡在线| 51午夜精品国产| 久久国产精品99久久久久久老狼| 精品国产99国产精品| 国产suv精品一区二区6| 一区二区三区四区在线免费观看| 91蝌蚪国产九色| 青青青爽久久午夜综合久久午夜| 日本久久精品电影| 国产精品国产成人国产三级| 国产a精品视频| 日本一区二区三区久久久久久久久不 | 日本视频中文字幕一区二区三区| 欧美日韩综合在线| 日本va欧美va瓶| 欧美mv日韩mv国产网站| 激情综合色综合久久| 欧美成人video| 国产精品99久久久| 亚洲欧洲精品一区二区三区| 91在线高清观看| 丝袜国产日韩另类美女| 亚洲精品在线三区| 成人一区在线看| 亚洲综合激情另类小说区| 欧美一区二区三区思思人| 国产一区在线精品| 国产精品电影院| 日韩女优av电影在线观看| 国产成人超碰人人澡人人澡| 一区二区三区四区不卡在线| 欧美一区国产二区| 99久免费精品视频在线观看 | 欧美一区二区三区不卡| 国产一区二区三区久久悠悠色av| 亚洲欧洲成人精品av97| 91精品免费观看| a在线播放不卡| 国产一区二区在线视频| 樱花影视一区二区| 国产网站一区二区| 5566中文字幕一区二区电影| av电影在线观看不卡| 精品一区二区三区在线播放 | 91精品国产综合久久蜜臀| 风间由美一区二区av101| 日韩1区2区日韩1区2区| 亚洲免费毛片网站| 国产精品每日更新在线播放网址| 欧美不卡一区二区三区| 欧美私人免费视频| 99精品久久只有精品| 国产成人一区二区精品非洲| 秋霞午夜av一区二区三区| 亚洲制服丝袜在线| 一区二区三区在线视频观看| 中文字幕五月欧美| 国产日产欧美一区| 26uuu色噜噜精品一区| 日韩一级欧美一级| 欧美一级国产精品| 久久综合av免费| 国产日韩欧美综合一区| 久久久久久久久99精品| 久久亚洲精精品中文字幕早川悠里 | 国内精品伊人久久久久av影院| 日本欧美一区二区三区乱码| 欧美a级理论片| 麻豆久久一区二区| 国产精品自拍一区| 成人免费高清视频在线观看| 粉嫩aⅴ一区二区三区四区| 国产99久久久国产精品免费看 | 欧美一区二区女人| 亚洲精品一区二区三区福利| 欧美激情综合五月色丁香| 国产精品久久一卡二卡| 亚洲精选一二三| 蜜臂av日日欢夜夜爽一区| 国产精品资源在线看| 99久久伊人精品| 欧美精品xxxxbbbb| 国产午夜一区二区三区| 一级精品视频在线观看宜春院 | 国产资源精品在线观看| 99久久精品久久久久久清纯| 欧美日韩视频一区二区| 2022国产精品视频| 亚洲人吸女人奶水| 韩国欧美国产一区| 欧美性感一区二区三区| 欧美高清一级片在线观看| 亚洲h在线观看| 91美女片黄在线| 精品理论电影在线| 国内外成人在线视频| 91首页免费视频| 色婷婷综合久色| 欧美日韩中文精品| 欧美成人a∨高清免费观看| 制服丝袜亚洲色图| 欧美一级日韩免费不卡| 欧美日韩一级二级三级| 日韩一区二区精品葵司在线| 欧美一区二区三区免费观看视频| 国产精品日韩成人| 一区二区三区91| 精品一区二区在线免费观看| 国产乱妇无码大片在线观看| 成人免费观看视频| 北岛玲一区二区三区四区 | 国产日韩高清在线| 亚洲国产va精品久久久不卡综合| 亚洲一级电影视频| 91一区二区三区在线播放| 久久久久97国产精华液好用吗| 麻豆成人久久精品二区三区小说| 91理论电影在线观看| 亚洲日本乱码在线观看| 99久久精品一区| 一区二区三区视频在线观看| 99久久精品一区| 亚洲一区二区3| 欧美久久久久久久久| 老司机精品视频导航| 精品国产区一区| 成人精品国产免费网站| 国产精品成人网| 欧美在线一二三四区| 亚洲午夜在线视频| 91精品国产一区二区三区香蕉| 久色婷婷小香蕉久久| 久久精子c满五个校花| 国产麻豆午夜三级精品| 日韩美女久久久| 91精品国模一区二区三区| 国产一区二三区好的| 亚洲另类春色校园小说| 欧美大片顶级少妇| 波多野结衣在线aⅴ中文字幕不卡| 一区二区三区.www|