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;
}