this->UpdateData(TRUE);//将控件的值赋给成员变量
/**
* 计算中间变量γ1,γ2
*/
double r1_angle = ((this->m_b_hz - this->m_a_hz)/PI) * 180;
double r2_angle = ((this->m_c_hz - this->m_b_hz)/PI) * 180;
double r1_rad = (double)(this->m_b_hz - this->m_a_hz);
this->m_r1.Format("%lf",r1_rad);
double r2_rad = (double)(this->m_c_hz - this->m_b_hz);
this->m_r2.Format("%lf",r2_rad);
/**
* 计算中间变量AB,BC,AC
* 其中Math.pow((a.e - b.e), 2)表示(a的e坐标-b的e坐标)的2次方
* Math.sqrt(x)表示对x开方
*/
double AB = sqrt(pow((this->m_a_e - this->m_b_e), 2) + pow((this->m_a_n - this->m_b_n), 2));
double BC = sqrt(pow((this->m_c_e - this->m_b_e), 2) + pow((this->m_c_n - this->m_b_n), 2));
double AC = sqrt(pow((this->m_a_e - this->m_c_e), 2) + pow((this->m_a_n - this->m_c_n), 2));
this->m_ab.Format("%lf",AB);
this->m_bc.Format("%lf",BC);
this->m_ac.Format("%lf",AC);
/**
* 计算终中间变量∠ABC
* 先要计算cos∠ABC
*/
double cosABC = (pow(BC, 2) + pow(AB, 2) - pow(AC, 2))/(2 * BC * AB);
double abc = ( acos(cosABC) * 180 )/ PI;//利用arcos求出∠ABC
this->m_cosjabc.Format("%lf",cosABC);
this->m_jabc.Format("%lf",abc);
/**
* 计算中间变量φ,ω
*/
double fi = (AB * sin(r2_rad))/(BC * sin(r1_rad));
double wmd_angle = 360 - (r1_angle + r2_angle + abc);
double wmd_rad = ( wmd_angle * PI )/180;
this->m_wmd.Format("%lf",wmd_rad);
this->m_fi.Format("%lf",fi);
/**
* 求出中间变量cotα1,cotβ1
*/
//Double ctanβ2 = (Math.tan(φ) * Math.cos(ω) + 1)/(Math.tan(φ) * Math.sin(ω));
double ctanalpha1 = (tan(fi) + cos(wmd_rad))/sin(wmd_rad);
double alpha1_rad = atan(1/ctanalpha1);
double alpha1_angle = (alpha1_rad * 180 )/PI;
double beta1 = (360 - r1_angle - alpha1_angle) * PI / 180;
double cotalpha1 = ctanalpha1;
double cotbeta1 = 1/tan(beta1);
this->m_alpha.Format("%lf",cotalpha1);
this->m_beta.Format("%lf",cotbeta1);
/**
* 求出仪器的新坐标中的E,N
*/
this->m_e.Format("%lf",(this->m_a_e * cotbeta1 + this->m_b_e * cotalpha1 + (this->m_b_n - this->m_a_n)) / (cotalpha1 + cotbeta1));
this->m_n.Format("%lf",(this->m_a_n * cotbeta1 + this->m_b_n * cotalpha1 - (this->m_b_e - this->m_a_e)) / (cotalpha1 + cotbeta1));
/**
* 处理换站后的高程,其中
* a.h代表基准点a首次测的坐标H,
* a.newH,代表换站后,基准点a的新坐标H
*/
double z0 = this->m_a_h - this->m_a_nh;
double z1 = this->m_b_h - this->m_b_nh;
double z2 = this->m_c_h - this->m_c_nh;
this->m_h.Format("%lf",(z0+z1+z2)/3);//求平均值
this->UpdateData(FALSE);//将成员变量的值赋给控件
核心公式:
运行结果:
- 大小: 1 KB
- 大小: 70.1 KB
分享到:
相关推荐
在摄影测量领域,空间后方交会是一种关键技术,它通过对摄影测量点的影像坐标和地面坐标进行数学处理,将影像信息转换为真实的三维空间坐标。此方法的核心在于使用旋转矩阵和投影矩阵,将二维影像坐标映射到三维世界...
在这个特定的资源中,我们关注的是“单片空间后方交会”算法,这是一种从单张照片恢复场景三维几何信息的方法。 空间后方交会,也称为单图像定位,是摄影测量中的核心算法之一。它涉及到将二维图像坐标与三维空间点...
从给定的C语言代码来看,它实现了一个空间后方交会算法,主要目的是确定相机在三维空间中的位置和姿态,通常用于摄影测量学和计算机视觉领域。空间后方交会有助于从多张图像中恢复场景的三维结构,或者确定拍摄这些...
总的来说,“VC.zip_后方交会_空间后方交会”是一个关于利用计算机视觉技术恢复三维信息的专题,涉及了摄影测量学的基本原理和C++编程实践。通过理解和应用这些知识,我们可以构建能够解析多视图几何的系统,这对于...
在空间后方交会这一核心算法的实现中,程序将单张图像中的二维坐标信息,通过复杂的数学计算,还原出真实的三维空间坐标。这是单像空间后方交会程序的灵魂所在,它使得通过一张照片就能解析出物体的实际大小、形状和...
单向空间后方交会是一种在计算机视觉和摄影测量领域中常用的技术,主要用于通过一组已知的二维图像像素坐标反求三维场景中的点位信息。在3D重建、机器人定位、无人机导航等领域有广泛应用。本项目提供了C++语言实现...
前方交会通常是在完成了后方交会的基础上进行的,后方交会负责确定相机的位置和姿态,而前方交会则是利用这些已知条件来解算空间点坐标。 ### 关键概念和技术细节 #### 1. 摄影测量学基础 摄影测量学是一门研究...
单目影像空间后方交会是计算机视觉和摄影测量领域中的一个重要概念,主要用于从单个摄像头拍摄的图像中恢复三维信息。这一技术的核心在于利用几何原理和数学优化方法,通过已知的一些特征点来估算相机的外方位元素,...
首先,我们需要知道目标物体的三维坐标和在照片上的二维投影,然后利用四元数的性质来解算相机相对于目标物体的旋转和位移。四元数乘法表示旋转,通过与一个代表特定旋转的四元数相乘,可以将一个坐标系旋转到另一个...
后方交会是摄影测量中的一种基本方法,用于通过已知三维空间点的图像坐标反求相机的位置和姿态,以及相机内参。在这个MATLAB样例中,我们将利用这种方法对相机进行校准,以获取相机模型的参数,包括焦距、主点坐标、...
现代全站仪通常可以存储大量观测数据,同时支持通过RS232C串口与其他设备如电子手簿、掌上电脑或计算机进行连接,提供多种测量模式,包括距离测量、角度测量、坐标测量以及更高级的后方交会、放样测量、对边测量和悬...
接着,程序会结合其他信息(如已知的三维点和它们在图像中的像素坐标)进行后方交会计算,最终输出相机的外方位元素。 总结来说,"houfangjiaohui.zip"包含了一个利用欧拉角描述旋转并进行后方交会计算的程序。这个...
在地铁监测中,测量机器人通常被设置在隧道两端的基准点上,利用自由设站法(后方交会)和极坐标测量方法来获得监测点的三维坐标。 液体静力水准是一种基于连通管原理的测量方法,能够通过测量不同储液罐的液面高度...
测量机器人完成设站后,会自动调取监测断面的监测点位置信息,进行自动扫描测量,获取监测点的最新三维坐标信息,并根据变形指标需求进行自动化数据处理。所有监测数据由观测成果远程控制管理系统进行实时处理。 综...
在摄影测量中,可以通过后方交会或相对定向来计算这些参数。姿态元素通常包括三个旋转角度(roll、pitch、yaw)和三个平移分量。DLT(直接线性变换)常用于外参数的初值估计,然后通过非线性优化进一步提高精度。 ...
GPS 定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。GPS 定位的原理可以用四个方程式来表示,其中待测点坐标 x、y、z 和 Vto 为未知参数。 四、...