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

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

?? rearmeet.cpp

?? 攝影測量中進行后方交會的程序
?? CPP
字號:
//RearMeet.cpp: implementation of the CRearMeet class.

////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "RearMeet.h"
#include "math.h"

#define PI 3.14159265358979
////////////////////////////////////////////////////////////////////
//Construction/Destruction
////////////////////////////////////////////////////////////////////
CRearMeet::CRearMeet()
{
}

CRearMeet::~CRearMeet()
{
}

/*
  功能:構造函數
  參數:df:主距; dm:攝影比例尺分母; in:控制點個數; x0 y0:像主點在框標坐標系的坐標;
  maPointXYZ:相片地面點坐標值; dk:航片旋轉角; dw:旁向偏角; da:航向偏角
  返回值:
  說明:
*/
CRearMeet::CRearMeet(double df, double dm, int in,  double dx0, double dy0, CMatrix maPointxyXYZ)
{ 
 	m_pDataFIlE = fopen("Data.txt", "w");
	m_iCount = 0;
	m_df = df;
	m_dm = dm;
	m_iPointNum = in;
	m_dx0 = dx0;
	m_dy0 = dy0;
	m_maPointxyXYZ = maPointxyXYZ;
	m_maR.Initate(3,3);
	m_maB.Initate(2*m_iPointNum,6);
	m_maL.Initate(2*m_iPointNum,1);
	m_maX0.Initate(6,1);
	m_madX.Initate(6,1);
	m_maX.Initate(6,1);
	m_maV.Initate(2*m_iPointNum,1);
    Initate();
	UpdateRMatrix();
	UpdateBMatrix();
	UpdateLMatrix();
	
}
/*
  功能:初始化函數
  參數:df:主距; dm:攝影比例尺分母; in:控制點個數; x0 y0:像主點在框標坐標系的坐標;
  maPointXYZ:相片地面點坐標值; dk:航片旋轉角; dw:旁向偏角; da:航向偏角
  返回值:成功返回 1 
  說明:
*/
int CRearMeet::Initate()
{
	m_da = 0;
	m_dw = 0;
	m_dk = 0;
	
	m_dXSYSZS[2] = m_df * m_dm;
	m_dXSYSZS[0] = m_dXSYSZS[1] = 0.0;
	double* pdPoint = m_maPointxyXYZ.GetData();
	int iLine = m_maPointxyXYZ.GetLine();
	for(int i=0; i<m_iPointNum; i++)
	{
		m_dXSYSZS[0] += pdPoint[i*iLine+2];
		m_dXSYSZS[1] += pdPoint[i*iLine+3];
	}
	m_dXSYSZS[0] /= m_iPointNum;
	m_dXSYSZS[1] /= m_iPointNum;

	double* pdX0 = m_maX0.GetData();
	pdX0[0] = m_dXSYSZS[0];
	pdX0[1] = m_dXSYSZS[1];
	pdX0[2] = m_dXSYSZS[2];
	pdX0[3] = m_da;
	pdX0[4] = m_dw;
	pdX0[5] = m_dk;
	return 1;
}
/*
  功能:主要的計算函數
  參數:無
  返回值:計算成功返回 1, 失敗返回0 
  說明:
*/
int CRearMeet::Calculate()
{
	m_iCount = 0;
	int iResult = 0;
	do 
	{
		m_iCount++;
//		double* pdmaV = m_maV.GetData();
//		double* pdmaPoint = m_maPointxyXYZ.GetData();
//		int imaPointLine = m_maPointxyXYZ.GetLine();
//		for(int i=0; i<m_iPointNum; i++)
//		{
//			pdmaPoint[i*imaPointLine] += pdmaV[2*i];
//			pdmaPoint[i*imaPointLine+1] += pdmaV[2*i+1];
//   		}
		
		if(m_iCount != 1)
		{
			double* pdX0 = m_maX0.GetData();
			m_dXSYSZS[0] = pdX0[0];
			m_dXSYSZS[1] = pdX0[1];
			m_dXSYSZS[2] = pdX0[2];
			m_da = pdX0[3];
			m_dw = pdX0[4];
			m_dk = pdX0[5];
			UpdateRMatrix();
			UpdateBMatrix();
			UpdateLMatrix();
		}
		CMatrix maBT = m_maB;
		fprintf(m_pDataFIlE, "第%d次迭代\n", m_iCount);
		fprintf(m_pDataFIlE, "-----------m_maB------------\n");
		FileOperate(m_maB);
		fprintf(m_pDataFIlE, "-----------m_maL------------\n");
		FileOperate(m_maL);
		maBT.transpose();
		CMatrix maBTB = maBT*m_maB;
		CMatrix maConveBTB = maBTB.GetConvertMatrix();
		m_maDx = maConveBTB;
		fprintf(m_pDataFIlE, "-----------m_maDx------------\n");

		FileOperate(m_maDx);
		m_madX = maConveBTB*maBT*m_maL;
 		m_maV = m_maB*m_madX - m_maL;
		m_maX0  = m_maX0 + m_madX;
		iResult = Judge();
		fprintf(m_pDataFIlE, "-----------m_maV------------\n");

		FileOperate(m_maV);
	} 
	while(iResult == -1&& m_iCount <= 5);
	if(m_iCount == 6) //計算不成功
		return 0;
	printf("%d\n", m_iCount);
	
	m_maV = m_maB*m_madX - m_maL;
	CMatrix maVT = m_maV;
	maVT.transpose();
	double* pdSigma;
	CMatrix maVTPV = maVT*m_maV;
	pdSigma = (maVTPV).GetData();
	m_dSigma = sqrt(pdSigma[0]/(2*m_iPointNum-6));
	fprintf(m_pDataFIlE, "---------------Sigma-----------\n");
	fprintf(m_pDataFIlE, "%.18lf", m_dSigma);
	m_maX = m_maX0;
	double* pdX = m_maX.GetData();
	m_dXSYSZS[0] = pdX[0];
	m_dXSYSZS[1] = pdX[1];
	m_dXSYSZS[2] = pdX[2];
	m_da = pdX[3];
	m_dw = pdX[4];
	m_dk = pdX[5];
	UpdateRMatrix();
	double* pdmaDx = m_maDx.GetData();
	printf("%.8lf, %.8lf, %.8lf, %.8lf, %.8lf, %.8lf\n", 
		sqrt(pdmaDx[0])*m_dSigma,sqrt(pdmaDx[7])*m_dSigma,sqrt(pdmaDx[14])*m_dSigma,
		sqrt(pdmaDx[21])*m_dSigma,sqrt(pdmaDx[28])*m_dSigma,sqrt(pdmaDx[35])*m_dSigma);

 	m_maR.DisplayMatrix();
// 	printf("%d\n",iCount);
	ResultOutPut();
	return 1;
}

int CRearMeet::UpdateBMatrix()
{
	double* pdB = m_maB.GetData();
	int ipdBLine = m_maB.GetLine();
	double* pdR = m_maR.GetData();
	int ipdRLine = m_maR.GetLine();
	double* pdXYZ = m_maPointxyXYZ.GetData();
	int ipdXYZLine = m_maPointxyXYZ.GetLine();

	double a_cos = cos(m_da);
	double a_sin = sin(m_da);
	double w_cos = cos(m_dw);
	double w_sin = sin(m_dw);
	double k_cos = cos(m_dk);
	double k_sin = sin(m_dk);
	double dZ = 0.0;
	double dx = 0.0;
	double dy = 0.0;
	for(int i=0; i<m_iPointNum; i++)
	{	
		
//		dx = pdXYZ[i*ipdXYZLine+0];
//    	dy = pdXYZ[i*ipdXYZLine+1];
		dZ = pdR[0*ipdRLine+2]*(pdXYZ[i*ipdXYZLine+2]-m_dXSYSZS[0]) + 
			 pdR[1*ipdRLine+2]*(pdXYZ[i*ipdXYZLine+3]-m_dXSYSZS[1]) +
			 pdR[2*ipdRLine+2]*(pdXYZ[i*ipdXYZLine+4]-m_dXSYSZS[2]);
		
		dx = pdR[0*ipdRLine+0]*(pdXYZ[i*ipdXYZLine+2]-m_dXSYSZS[0]) + 
			 pdR[1*ipdRLine+0]*(pdXYZ[i*ipdXYZLine+3]-m_dXSYSZS[1]) +
			 pdR[2*ipdRLine+0]*(pdXYZ[i*ipdXYZLine+4]-m_dXSYSZS[2]);
		
		dy = pdR[0*ipdRLine+1]*(pdXYZ[i*ipdXYZLine+2]-m_dXSYSZS[0]) + 
			 pdR[1*ipdRLine+1]*(pdXYZ[i*ipdXYZLine+3]-m_dXSYSZS[1]) +
			 pdR[2*ipdRLine+1]*(pdXYZ[i*ipdXYZLine+4]-m_dXSYSZS[2]);	
		dx = m_dx0 - m_df*dx/dZ;
     		dy = m_dy0 - m_df*dy/dZ;

		int i1 = i*2;
		
		pdB[i1*ipdBLine+0] = (pdR[0*ipdRLine+0]*m_df + pdR[0*ipdRLine+2]*(dx-m_dx0))/dZ;
		pdB[i1*ipdBLine+1] = (pdR[1*ipdRLine+0]*m_df + pdR[1*ipdRLine+2]*(dx-m_dx0))/dZ;
		pdB[i1*ipdBLine+2] = (pdR[2*ipdRLine+0]*m_df + pdR[2*ipdRLine+2]*(dx-m_dx0))/dZ;
		pdB[i1*ipdBLine+3] = (dy-m_dy0)*w_sin - 
					         w_cos*( m_df*k_cos+(dx-m_dx0)*((dx-m_dx0)
					         *k_cos-(dy-m_dy0)*k_sin)/m_df );
		pdB[i1*ipdBLine+4] = -m_df*k_sin - 
					         (dx-m_dx0)*((dx-m_dx0)*k_sin+(dy-m_dy0)*k_cos)/m_df;
		pdB[i1*ipdBLine+5] = dy - m_dy0;
		
		int i2 = i1 + 1;
		pdB[i2*ipdBLine+0] = (pdR[0*ipdRLine+1]*m_df + pdR[0*ipdRLine+2]*(dy-m_dy0))/dZ;
		pdB[i2*ipdBLine+1] = (pdR[1*ipdRLine+1]*m_df + pdR[1*ipdRLine+2]*(dy-m_dy0))/dZ;
		pdB[i2*ipdBLine+2] = (pdR[2*ipdRLine+1]*m_df + pdR[2*ipdRLine+2]*(dy-m_dy0))/dZ;
		pdB[i2*ipdBLine+3] = -(dx-m_dx0)*w_sin - 
					         w_cos*( -m_df*k_sin+(dy-m_dy0)*((dx-m_dx0)
					         *k_cos-(dy-m_dy0)*k_sin)/m_df );
		pdB[i2*ipdBLine+4] = -m_df*k_cos - 
					         (dy-m_dy0)*((dx-m_dx0)*k_sin+(dy-m_dy0)*k_cos)/m_df;
		pdB[i2*ipdBLine+5] = m_dx0 - dx;		
	}
	return 1;
}

int CRearMeet::UpdateLMatrix()
{
	double* pdL = m_maL.GetData();
	double* pdxyXYZ = m_maPointxyXYZ.GetData();
	int ipdXYZLine = m_maPointxyXYZ.GetLine();
	double dX = 0.0;
	double dY = 0.0;
	double dZ = 0.0;
	double dXYZXYZS[3] = {0.0};
	CMatrix maXYZXYZS;
	for(int i=0; i<m_iPointNum; i++)
	{
		dXYZXYZS[0] = pdxyXYZ[i*ipdXYZLine+2] - m_dXSYSZS[0];
		dXYZXYZS[1] = pdxyXYZ[i*ipdXYZLine+3] - m_dXSYSZS[1];
		dXYZXYZS[2] = pdxyXYZ[i*ipdXYZLine+4] - m_dXSYSZS[2];
		maXYZXYZS.CreateData(dXYZXYZS, 3, 1);
		CMatrix maRTra = m_maR;
		maRTra.transpose();
		CMatrix maXYZ = maRTra*maXYZXYZS;
		double* pdXYZ = maXYZ.GetData();
		int i1 = i*2;
		pdL[i1] = pdxyXYZ[i*ipdXYZLine+0] - (-m_df*pdXYZ[0]/pdXYZ[2] + m_dx0)  ;
		pdL[i1+1] = pdxyXYZ[i*ipdXYZLine+1] - (-m_df*pdXYZ[1]/pdXYZ[2] + m_dy0) ;
	}
	return 1;
}

int CRearMeet::UpdateRMatrix()
{
	double* pdR = m_maR.GetData();
	int iLine = m_maR.GetLine();
	double a_cos = cos(m_da);
	double a_sin = sin(m_da);
	double w_cos = cos(m_dw);
	double w_sin = sin(m_dw);
	double k_cos = cos(m_dk);
	double k_sin = sin(m_dk);
	pdR[0] = a_cos*k_cos - a_sin*w_sin*k_sin;
	pdR[1] = - a_cos*k_sin - a_sin*w_sin*k_cos;
	pdR[2] = - a_sin * w_cos;
	pdR[3] = w_cos*k_sin;
	pdR[4] = w_cos*k_cos;
	pdR[5] = - w_sin;
	pdR[6] = a_sin*k_cos + a_cos*w_sin*k_sin;
	pdR[7] = - a_sin*k_sin + a_cos*w_sin*k_cos;
	pdR[8] = a_cos * w_cos;
	return 1;
}

int CRearMeet::Judge()
{
	double* pdDx = m_madX.GetData();
	int iLine = m_madX.GetLine();
	double dTriError = 3e-5;
	if(fabs(pdDx[0])<=0.01 && fabs(pdDx[1])<=0.01 && fabs(pdDx[2])<=0.01 &&
	   fabs(pdDx[3])<=dTriError && fabs(pdDx[4])<=dTriError && fabs(pdDx[5])<=dTriError)
		return 1;
	else 
		return -1;
}

void CRearMeet::Display()
{
	double* pdX = m_maX.GetData();
	for(int i=0; i<6; i++)
		printf("%10.5lf  ",pdX[i]);
	printf("\n");
}

void CRearMeet::FileOperate(CMatrix maOutput)
{
	int iRow = maOutput.GetRow();
	int iLine = maOutput.GetLine();
	double* pdma = maOutput.GetData();
	for(int i=0; i<iRow; i++)
	{
		for(int j=0; j<iLine; j++)
			fprintf(m_pDataFIlE, "%20.7lf ", pdma[i*iLine+j]);
		fprintf(m_pDataFIlE, "\n");	
	}
	fprintf(m_pDataFIlE, "\n");
 }

void CRearMeet::ResultOutPut()
{
	fprintf(m_pDataFIlE, "-----------------------------------------------------\n");
	fprintf(m_pDataFIlE, "                     空間后方交會計算\n");
	fprintf(m_pDataFIlE, "-----------------------------------------------------\n");
	fprintf(m_pDataFIlE, "             影像坐標             地面坐標\n");
	fprintf(m_pDataFIlE, "-----------------------------------------------------\n");
	fprintf(m_pDataFIlE, "-------x(mm)-----y(mm)---|----X(m)------Y(m)------Z(m)-------\n");
	double* pfmaxyXYZ = m_maPointxyXYZ.GetData();
	for(int i=0; i<4; i++)
	{
	fprintf(m_pDataFIlE, "    %8.2lf  %8.2lf   |  %8.2lf  %8.2lf %8.2lf\n",
		pfmaxyXYZ[i*5]*1000,pfmaxyXYZ[i*5+1]*1000,pfmaxyXYZ[i*5+2],pfmaxyXYZ[i*5+3],pfmaxyXYZ[i*5+4]);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区中文日韩| 99精品黄色片免费大全| av激情成人网| 日韩欧美一级二级三级| 亚洲欧美一区二区三区孕妇| 三级不卡在线观看| 色综合 综合色| 亚洲国产精品激情在线观看| 日本欧美久久久久免费播放网| 成人黄色小视频| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲在线观看免费| 成人午夜电影小说| 久久九九99视频| 麻豆高清免费国产一区| 欧美日精品一区视频| 亚洲欧美偷拍另类a∨色屁股| 精品一区精品二区高清| 日韩欧美国产三级电影视频| 亚洲一区二区偷拍精品| 91美女视频网站| 国产精品女主播av| 欧美视频中文字幕| 一区二区三区丝袜| 99综合影院在线| 中文字幕五月欧美| heyzo一本久久综合| 中文字幕va一区二区三区| 国产98色在线|日韩| 国产性色一区二区| 丁香五精品蜜臀久久久久99网站| 久久久精品影视| 国产成人精品综合在线观看| 久久久久久久精| 福利一区二区在线观看| 日本一区免费视频| 99久久综合国产精品| 亚洲人成亚洲人成在线观看图片 | 国产在线观看免费一区| 日韩一区二区视频在线观看| 蜜桃av一区二区三区电影| 日韩精品专区在线| 国产精品羞羞答答xxdd| 欧美韩日一区二区三区四区| 成人免费视频视频在线观看免费| 国产精品女上位| 欧美视频自拍偷拍| 久久国内精品视频| 国产精品亲子乱子伦xxxx裸| 99久久婷婷国产综合精品 | 欧美日韩中字一区| 日韩精品三区四区| 久久久不卡网国产精品二区| 国产69精品久久99不卡| 亚洲免费成人av| 欧美一区二区三区在线视频| 国产一区二三区| 亚洲蜜臀av乱码久久精品蜜桃| 在线精品亚洲一区二区不卡| 日韩综合一区二区| 2021中文字幕一区亚洲| 99国产精品99久久久久久| 亚洲国产日产av| 久久久久国产免费免费| 欧美在线视频你懂得| 老司机免费视频一区二区三区| 国产欧美日韩三级| 欧美体内she精视频| 极品尤物av久久免费看| 亚洲码国产岛国毛片在线| 91精品国产色综合久久不卡蜜臀 | 欧美在线影院一区二区| 国产一区福利在线| 亚洲一区二区三区精品在线| 精品国产乱码久久久久久夜甘婷婷| 成人深夜福利app| 日韩影视精彩在线| 免费人成在线不卡| 亚洲人亚洲人成电影网站色| 337p亚洲精品色噜噜噜| 99精品久久99久久久久| 国产美女在线观看一区| 亚洲成av人在线观看| 国产精品免费看片| 精品欧美一区二区三区精品久久| 色偷偷久久一区二区三区| 精品伊人久久久久7777人| 亚洲成人你懂的| 亚洲欧洲日韩一区二区三区| 精品福利二区三区| 欧美卡1卡2卡| 在线观看日韩高清av| 成人性生交大片免费看中文| 寂寞少妇一区二区三区| 日本v片在线高清不卡在线观看| 亚洲色图欧美在线| 中文字幕欧美国产| 欧美国产国产综合| 国产午夜精品理论片a级大结局| 欧美一区二区三区性视频| 欧洲视频一区二区| 一本色道久久综合亚洲91| 国产二区国产一区在线观看| 久久国产视频网| 日韩福利电影在线观看| 亚洲3atv精品一区二区三区| 一区二区三区色| 一区二区三区日韩欧美| 尤物视频一区二区| 亚洲最大成人网4388xx| 一区二区三区日韩欧美| 亚洲成人在线网站| 水蜜桃久久夜色精品一区的特点| 洋洋av久久久久久久一区| 亚洲精品高清在线| 亚洲美女在线国产| 亚洲国产成人porn| 午夜精品视频在线观看| 日韩精品1区2区3区| 日韩电影免费一区| 久久国产尿小便嘘嘘| 麻豆精品视频在线观看视频| 理论片日本一区| 国产精品中文字幕欧美| 国产suv精品一区二区6| 成人黄色在线看| 日本韩国一区二区三区视频| 色94色欧美sute亚洲线路二| 日本福利一区二区| 在线观看91精品国产麻豆| 欧美va亚洲va国产综合| 久久综合精品国产一区二区三区| 久久先锋影音av鲁色资源| 国产丝袜在线精品| 亚洲欧美电影院| 香蕉成人伊视频在线观看| 日韩成人一级大片| 国产精品一区一区三区| 99久久99精品久久久久久| 91久久免费观看| 91精品国产色综合久久不卡电影| 一区二区三区在线视频观看58 | 欧美视频自拍偷拍| 日韩一级欧美一级| 欧美国产激情二区三区| 亚洲成人资源网| 国产精品一品二品| 色婷婷久久一区二区三区麻豆| 欧美日韩一区二区三区在线 | 国产高清在线精品| 色老汉一区二区三区| 欧美一区二区不卡视频| 国产色爱av资源综合区| 亚洲五码中文字幕| 国产乱子伦一区二区三区国色天香 | 天天综合天天做天天综合| 国产福利不卡视频| 欧美一级欧美三级在线观看| 国产亚洲短视频| 亚洲福利视频导航| 丰满亚洲少妇av| 91精品在线一区二区| 国产精品麻豆久久久| 日本不卡123| 色欧美日韩亚洲| 久久久久久久免费视频了| 亚洲午夜久久久久久久久久久| 精一区二区三区| 欧美日韩中文字幕一区| 久久久av毛片精品| 亚洲国产精品久久艾草纯爱| 国产成人一区在线| 日韩精品一区二区三区视频播放| 一区二区三区四区亚洲| 成人精品免费视频| 精品女同一区二区| 日韩国产欧美在线视频| 一本大道久久精品懂色aⅴ| 久久久久青草大香线综合精品| 日韩高清不卡一区二区三区| 在线这里只有精品| 亚洲欧洲日产国码二区| 国产成人综合自拍| 日韩久久久久久| 久久国产福利国产秒拍| 欧美精品一二三| 亚洲高清免费视频| 91麻豆免费在线观看| 国产精品久久久久久久午夜片| 国产乱人伦精品一区二区在线观看| 在线不卡免费欧美| 香蕉加勒比综合久久| 欧美色倩网站大全免费| 亚洲一区二区三区在线| 欧美日韩免费在线视频| 亚洲一区二区中文在线| 欧美视频精品在线| 亚洲自拍欧美精品| 欧美挠脚心视频网站| 亚洲h在线观看|