三角网平差界面程序设计

总体要求

利用C++语言和Qt界面库编写导线网间接平差程序。导线网如下图所示,其中A、B为已知点,CD为基线边,又已知BE的方位角,已知角度测量中误差,距离误差加常数5mm,距离误差乘常数5mm/Km。起算数据见表1,观测了全部角度值,列于表2 。求各待定点坐标的平差值。

1

点号 坐标 边长/m 方位角 至何点
X Y S α\alpha
B 2802234.190 19437826.220 249°2210.17249^°22'10.17'' E
C 6523.643 D
A 2794005.704 19433831.115
角号 观测值 角号 观测值 角号 观测值
1 54 49 29.57 7 77 14 59.04 13 56 31 36.21
2 43 28 18.22 8 46 18 21.93 14 67 51 49.11
3 81 42 11.62 9 56 26 38.83 15 55 36 35.70
4 48 19 00.60 10 52 27 11.49 16 64 22 06.49
5 85 31 37.21 11 60 48 47.61 17 62 16 36.29
6 46 09 20.35 12 66 43 59.30 18 53 21 14.20

准备工作

  • 方法选择:
    • 考虑到程序的自动化和通用性,因此采用间接平差法,由于有多余的已知条件,所以最终选择附有限制条件的间接平差法。
    • 平差方法具体推导见:附有限制条件间接平差

  • 预备知识:
    1. 由题意可知,总观测值为18,必要观测值为8(原本是10个必要观测者,但是由于DC是已知边,BE是已知方位角,所以最后只有8个必要观测值),因此设定10个参数(18个观测角方程,两个条件方程),即C,D,E,F,G点的坐标值为参数值。
    2. 根据前方交会知识,可由已知的两坐标A,B求出待定点E的估计坐标值,之后再由B,E坐标求出C点的估计值,以此类推求出D和F的坐标估计值(以最短边原则计算各个参数的估计值,即E点由A,B求出,C点由B,E求出,D由C,E求出,F由G,E求出,G点由A,E求出)。
    3. 由参数值的估计值求出两点间的方位角,由两方位角求出夹角并列出误差方程系数阵,由于方程不是线性形式,因此需要用泰勒级数展开至一次项线性化。
    4. 由已知方位角和已知边列出两个条件方程,即SDC0+δDC0SDC=0S_{DC}^0+\delta_{DC}^0-S_{DC}=0αBE0+δBE(α)α=0\alpha_{BE}^0+\delta_{BE}(\alpha)-\alpha=0列出条件方程,当然方程不会是线性形式,因此需要用泰勒级数展开取至一次项线性化。
    5. 由观测值和估值相减求出参数的常数项,由求出的近似值作为条件方程的常数项。
    6. x=(NBB1NBB1CTNCC1CNBB1)W+NBB1CTNCC1Wxx=(N_{BB}^{-1}-N_{BB}^{-1}C^TN_{CC}^{-1}CN_{BB}^{-1})W+N_{BB}^{-1}C^TN_{CC}^{-1}W_x求出参数的改正数,其中(W=BTPl,NBB=BTPB,NCC=CNBB1CTW=B^TPl,N_{BB}=B^TPB,N_{CC}=CN_{BB}^{-1}C^T)
    7. X=X0+xX=X^0+x求出参数平差值
    8. v=Bxlv=Bx-l求出观测值改正数
    9. L=L0+vL=L^0+v求出观测值平差值
    10. 因为各个观测值独立,所以由δ0=VTPVr=[PVV]r=[PVV]nu+s\delta_0=\sqrt{\frac{V^TPV}{r}}=\sqrt{\frac{[PVV]}{r}}=\sqrt{\frac{[PVV]}{n-u+s}}(其中r为多余观测数,u-s=t为必要的独立参数的个数)求出单位权方差,Qxx=NBB1NBB1CTNCC1CNBB1Q_{xx}=N_{BB}^{-1}-N_{BB}^{-1}C^TN_{CC}^{-1}CN_{BB}^{-1}求出协因数阵的出参数的协因数,其主对角线为各个参数的权倒数,因此可求出各个参数的中误差,再由δpi=δxi2+δyi2\delta_{pi}=\sqrt{\delta_{xi}^2+\delta_{yi}^2}求出各个点位中误差。

  • 编写数据格式:
    • 第一行:总点数,已知点数,已知边数,已知方位角数,观测角数
    • 第二行:所有点名称
    • 第三部分:已知点信息(点号,坐标)
    • 第四部分:已知边信息
    • 第五部分:已知方位角信息
    • 第六部分:观测值信息(观测值编号,起始点,中间点,终点)

  • 公式
    1. 前方交会公式(推导见:前方交会):

    xp=xAsinAcosB+xBcosAsinB+(yAyB)sinAsinBsinAcosB+cosAsinByp=yAsinAcosB+yBcosAsinB+(xBxA)sinAsinBsinAcosB+cosAsinBx_p=\frac{x_AsinAcosB+x_BcosAsinB+(y_A-y_B)sinAsinB}{sinAcosB+cosAsinB} \newline y_p=\frac{y_AsinAcosB+y_BcosAsinB+(x_B-x_A)sinAsinB}{sinAcosB+cosAsinB}

  • 编写库函数:
    • 矩阵库:由于平差计算中大量用到矩阵运算,因此提前编写矩阵库(代码详见:Matrix)会给编程带来方便
    • 角度库:由于C++中的三角函数都是以弧度为单位,但平差中的角度大多以工程角度给出,因此编写一个角度库(代码详见:angleBase)显得尤为必要。

思维导图

成果截图

-------------本文结束感谢您的阅读-------------