求助,后方交会程序,可以运行,但是结果都为0

/////////单像后方交会/////////
int num = PointNum1.size();//点的个数
double a1, a2, a3, b1, b2, b3, c1, c2, c3;
double Q = 0.0;
Mat A(2, 13, CV_64FC1, Scalar(0.0));
Mat At(13, 2, CV_64FC1, Scalar(0.0));
Mat AtA(13, 13, CV_64FC1, Scalar(0.0));
Mat AtL(13, 1, CV_64FC1, Scalar(0.0));
Mat NAtA(13, 13, CV_64FC1, Scalar(0.0));
Mat L(2, 1, CV_64FC1, Scalar(0.0));

Mat XX(13, 1, CV_64FC1);//误差方程式和法方程式
double* LL = new double[2 * num];
double Qii[13] = { 0.0 };
double mXs, mYs, mZs, mphi, momega, mkappa, sum = 0.0;
double mf, mx, my;
double mk1, mk2, mp1, mp2;
int times = 0;

double phi = (30.0 * Pi) / 180.0, omega = 0.0, kappa = 0.0; //外方位角元素
double Xs = 1000.0, Ys = -30.0, Zs = -2000.0;  //外方位线元素
double x0 = 0.0, y0 = 0.0, f = 23;  //内方位元素
double k1 = 0.0, k2 = 0.0, p1 = 0.0, p2 = 0.0;//畸变改正数
double datax, datay;

do
{
    a1 = cos(phi) * cos(kappa) - sin(phi) * sin(omega) * sin(kappa);
    a2 = -cos(phi) * sin(kappa) - sin(phi) * sin(omega) * cos(kappa);
    a3 = -sin(phi) * cos(omega);
    b1 = cos(omega) * sin(kappa);
    b2 = cos(omega) * cos(kappa);
    b3 = -sin(omega);
    c1 = sin(phi) * cos(kappa) + cos(phi) * sin(omega) * sin(kappa);
    c2 = -sin(phi) * sin(kappa) + cos(phi) * sin(omega) * cos(kappa);
    c3 = cos(phi) * cos(omega);

    Mat AtA1(13, 13, CV_64FC1, Scalar(0.0));
    Mat AtA1_inv(13, 11, CV_64FC1, Scalar(0.0));
    Mat AtL1(13, 1, CV_64FC1, Scalar(0.0));

    for (int i = 0; i < num; i++)
    {
        double rr = (x.at(i) - x0) * (x.at(i) - x0) + (y.at(i) - y0) * (y.at(i) - y0);//定义常数项
        double Xp = a1 * (X.at(i) - Xs) + b1 * (Y.at(i) - Ys) + c1 * (Z.at(i) - Zs);
        double Yp = a2 * (X.at(i) - Xs) + b2 * (Y.at(i) - Ys) + c2 * (Z.at(i) - Zs);
        double Zp = a3 * (X.at(i) - Xs) + b3 * (Y.at(i) - Ys) + c3 * (Z.at(i) - Zs);

        A.at<double>(0, 0) = 1.0 * (a1 * f + a3 * (x.at(i) - x0)) / Zp;
        A.at<double>(0, 1) = 1.0 * (b1 * f + b3 * (x.at(i) - x0)) / Zp;
        A.at<double>(0, 2) = 1.0 * (c1 * f + c3 * (x.at(i) - x0)) / Zp;
        A.at<double>(0, 3) = (y.at(i) - y0) * sin(omega) - ((x.at(i) - x0) * ((x.at(i) - x0) * cos(kappa) - (y.at(i) - y0) * sin(kappa)) / f + f * cos(kappa)) * cos(omega);
        A.at<double>(0, 4) = -f * sin(kappa) - (x.at(i) - x0) * ((x.at(i) - x0) * sin(kappa) + (y.at(i) - y0) * cos(kappa)) / f;
        A.at<double>(0, 5) = (y.at(i) - y0);
        A.at<double>(0, 6) = (x.at(i) - x0) / f;
        A.at<double>(0, 7) = 1.0;
        A.at<double>(0, 8) = 0.0;
        A.at<double>(0, 9) = -(x.at(i) - x0) * rr;
        A.at<double>(0, 10) = -(x.at(i) - x0) * rr * rr;
        A.at<double>(0, 11) = -rr - 2 * (x.at(i) - x0) * (x.at(i) - x0);
        A.at<double>(0, 12) = -2 * (x.at(i) - x0) * (y.at(i) - y0);

        A.at<double>(1, 0) = 1.0 * (a2 * f + a3 * (y.at(i) - y0)) / Zp;
        A.at<double>(1, 1) = 1.0 * (b2 * f + b3 * (y.at(i) - y0)) / Zp;
        A.at<double>(1, 2) = 1.0 * (c2 * f + c3 * (y.at(i) - y0)) / Zp;
        A.at<double>(1, 3) = -(x.at(i) - x0) * sin(omega) - ((y.at(i) - y0) * ((x.at(i) - x0) * cos(kappa) - (y.at(i) - y0) * sin(kappa)) / f - f * sin(kappa)) * cos(omega);
        A.at<double>(1, 4) = -f * cos(kappa) - (y.at(i) - y0) * ((x.at(i) - x0) * sin(kappa) + (y.at(i) - y0) * cos(kappa)) / f;
        A.at<double>(1, 5) = -(x.at(i) - x0);
        A.at<double>(1, 6) = (y.at(i) - y0) / f;
        A.at<double>(1, 7) = 0.0;
        A.at<double>(1, 8) = 1.0;
        A.at<double>(1, 9) = -(y.at(i) - y0) * rr;
        A.at<double>(1, 10) = -(y.at(i) - y0) * rr * rr;
        A.at<double>(1, 11) = -2 * (x.at(i) - x0) * (y.at(i) - y0);
        A.at<double>(1, 12) = -rr - 2 * (y.at(i) - y0) * (y.at(i) - y0);


        datax = (x.at(i) - x0) * (k1 * rr + k2 * rr * rr) + p1 * (rr + 2 * (x.at(i) - x0) * (x.at(i) - x0)) + 2 * p2 * (x.at(i) - x0) * (y.at(i) - y0);
        datay = (y.at(i) - y0) * (k1 * rr + k2 * rr * rr) + p2 * (rr + 2 * (y.at(i) - y0) * (y.at(i) - y0)) + 2 * p1 * (x.at(i) - x0) * (y.at(i) - y0);
        L.at<double>(0, 0) = x.at(i) + f * Xp / Zp - x0 + datax;
        L.at<double>(1, 0) = y.at(i) + f * Yp / Zp - y0 + datay;
        At = A.t();
        AtA = At * A;
        AtL = At * L;

        AtA1 += AtA;
        AtL1 += AtL;

        LL[2 * i] = L.at<double>(0, 0);
        LL[2 * i + 1] = L.at<double>(1, 0);
    }

    AtA1_inv = AtA1.inv();
    XX = AtA1_inv * AtL1;

    for (int i = 0; i < 13; i++)
    {
        Qii[i] = AtA1_inv.at<double>(i, i);
    }

    Xs += XX.at<double>(0, 0);
    Ys += XX.at<double>(1, 0);
    Zs += XX.at<double>(2, 0);
    phi += XX.at<double>(3, 0);
    omega += XX.at<double>(4, 0);
    kappa += XX.at<double>(5, 0);
    f += XX.at<double>(6, 0);
    x0 += XX.at<double>(7, 0);
    y0 += XX.at<double>(8, 0);
    k1 += XX.at<double>(9, 0);
    k2 += XX.at<double>(10, 0);
    p1 += XX.at<double>(11, 0);
    p2 += XX.at<double>(12, 0);

    times += 1;
} while ((fabs(XX.at<double>(0, 0)) > 0.000001 || fabs(XX.at<double>(1, 0)) > 0.000001 || fabs(XX.at<double>(2, 0)) > 0.000001
    || fabs(XX.at<double>(3, 0)) > 0.0000001 || fabs(XX.at<double>(4, 0)) > 0.0000001 || fabs(XX.at<double>(5, 0)) > 0.0000001
    || fabs(XX.at<double>(6, 0)) > 0.000001 || fabs(XX.at<double>(7, 0)) > 0.000001 || fabs(XX.at<double>(8, 0)) > 0.000001
    || fabs(XX.at<double>(9, 0)) > 0.000001 || fabs(XX.at<double>(10, 0)) > 0.000001 || fabs(XX.at<double>(11, 0)) > 0.000001
    || fabs(XX.at<double>(12, 0)) > 0.000001));

for (int i = 0; i < 2 * num; i++)
{
    Q += LL[i] * LL[i];
}
Q = sqrt(Q / (2 * num - 6));

mXs = sqrt(Qii[0]) * Q;
mYs = sqrt(Qii[1]) * Q;
mZs = sqrt(Qii[2]) * Q;
mphi = sqrt(Qii[3]) * Q;
momega = sqrt(Qii[4]) * Q;
mkappa = sqrt(Qii[5]) * Q;
mf = sqrt(Qii[6]) * Q;
mx = sqrt(Qii[7]) * Q / 0.0051966;
my = sqrt(Qii[8]) * Q / 0.0051966;
mk1 = sqrt(Qii[9]) * Q;
mk2 = sqrt(Qii[10]) * Q;
mp1 = sqrt(Qii[11]) * Q;
mp2 = sqrt(Qii[12]) * Q;

FILE* fResult;
fopen_s(&fResult,"Result.txt", "w");
fprintf(fResult, "单片后方空间交会结果如下:\n\n");
fprintf(fResult, "*****************************************************************************\n\n");
fprintf(fResult, "迭代次数为:%d\n", &times);
fprintf(fResult, "计算结果如下:\n");
fprintf(fResult, "单位权中误差为:±%lf\n", &Q);

fprintf(fResult, "外方位元素:\n");
fprintf(fResult, "Xs=%lf,         ±%lf mm\n", &Xs, &mXs);
fprintf(fResult, "Ys=%lf,         ±%lf mm\n", &Ys, &mYs);
fprintf(fResult, "Zs=%lf,         ±%lf mm\n", &Zs, &mZs);
fprintf(fResult, "phi=%lf,         ±%lf rad\n", &phi, &mphi);
fprintf(fResult, "omega=%lf,         ±%lf rad\n", &omega, &momega);
fprintf(fResult, "kappa=%lf,         ±%lf rad\n", &kappa, &mkappa);

fprintf(fResult, "内方位元素:\n");
fprintf(fResult, "f=%lf,         ±%lf mm\n", &f, &mf);
fprintf(fResult, "x0=%lf,         ±%lf pixel\n", &x0, &mx);
fprintf(fResult, "y0=%lf,         ±%lf pixel\n", &y0, &my);

fprintf(fResult, "畸变改正系数:\n");
fprintf(fResult, "k1=%lf,         ±%lf \n", &k1, &mk1);
fprintf(fResult, "k2=%lf,         ±%lf \n", &k2, &mk2);
fprintf(fResult, "p1=%lf,         ±%lf \n", &p1, &mp1);
fprintf(fResult, "p2=%lf,         ±%lf \n", &p2, &mp2);

cout << "结果已输出至文档中!" << endl;

https://blog.csdn.net/liuyujie3229166/article/details/106888245/