练习2后方交会

double pca_cal(double x1, double y1, double x2, double y2)//后方交会坐标求方位角(下x右y)
{
    double pi=3.1415926;
    double detax, detay, azi;
    double rab;
    detax = x2 - x1;
    detay = y2 - y1;
    azi = atan(detax / detay);
    if (detay == 0)
    {
        detax > 0 ? rab = 0 : rab = pi;
    }
    else if (detay > 0)
    {
        rab = pi / 2 - azi;
    }
    else
        rab = pi*3/ 2 - azi;
    return (rab);
}

double b_int()
{
    double xa, ya, xb, yb, xc, yc, xp, yp;
    double Ra, Rb, Rc;//水平观测值
    double anglea, angleb, anglec;//α,β,γ
    double A, B, C;//内角
    double Pa, Pb, Pc;//权

    cout << "请输入A点坐标" << endl;
    cin >> xa >> ya;
    cout << "请输入B点坐标" << endl;
    cin >> xb >> yb;
    cout << "请输入C点坐标" << endl;
    cin >> xc >> yc;
    cout << "请输入水平观测值Ra(度分秒" << endl;
    cin >> Ra;
    cout << "请输入水平观测值Rb" << endl;
    cin >> Rb;
    cout << "请输入水平观测值Rc" << endl;
    cin >> Rc;
    cout << endl;
    //度分秒换弧度值
    Ra = dfm2rad(Ra);
    Rb = dfm2rad(Rb);
    Rc = dfm2rad(Rc);
    //观测值求α,β,γ
    anglea = Rc - Rb;
    angleb = Ra - Rc;
    anglec = Rb - Ra;
    cout << "α,β,γ" << endl << anglea << endl << angleb << endl << anglec << endl << endl;
    //坐标方位角求内角
    A = pca_cal(xa, ya, xc, yc) - pca_cal(xa, ya, xb, yb);
    B = pca_cal(xb, yb, xa, ya) - pca_cal(xb, yb, xc, yc);
    C = pca_cal(xc, yc, xb, yb) - pca_cal(xc, yc, xa, ya);
    cout << "A,B,C" << endl << A << endl << B << endl << C << endl << endl;
    //仿权公式
    Pa = 1 / (cot(A) - cot(anglea));
    Pb = 1 / (cot(B) - cot(angleb));
    Pc = 1 / (cot(C) - cot(anglec));
    cout << "Pa,Pb,Pc" << endl << Pa << endl << Pb << endl << Pc << endl << endl;
    double underx, undery, down;
    underx = Pa * xa + Pb * xb + Pc * xc;
    undery = Pa * ya + Pb * yb + Pc * yc;
    down = Pa + Pb + Pc;

    xp = underx / down;
    yp = undery / down;

    cout << "P点坐标为" << endl << fixed << setprecision(3) << xp << " , " << yp << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值