#include "global.h"

/* compute target to photo equation */
int Compute_ortho_equation(struct Ortho_Image_Group *group)
{
    double e0, e1, e2, n0, n1, n2, z1, z2;
    int status, i;
    struct Ortho_Control_Points temp_points;

    /* alloc and fill temp control points */
    temp_points.count = 0;
    temp_points.status = NULL;
    temp_points.e1 = NULL;
    temp_points.n1 = NULL;
    temp_points.z1 = NULL;
    temp_points.e2 = NULL;
    temp_points.n2 = NULL;
    temp_points.z2 = NULL;

    /* e0, n0, equal photo coordinates not image coords */
    for (i = 0; i < group->control_points.count; i++) {
        status = group->control_points.status[i];
        e1 = group->control_points.e1[i];
        n1 = group->control_points.n1[i];
        z1 = group->control_points.z1[i];
        e2 = group->control_points.e2[i];
        n2 = group->control_points.n2[i];
        z2 = group->control_points.z2[i];

        /* image to photo transformation */
        I_georef(e1, n1, &e0, &n0, group->E12, group->N12, 1);
        I_new_con_point(&temp_points, e0, n0, z1, e2, n2, z2, status);
    }

    group->con_equation_stat = I_compute_ortho_equations(
        &temp_points, &group->camera_ref, &group->camera_exp, &group->XC,
        &group->YC, &group->ZC, &group->omega, &group->phi, &group->kappa,
        &group->M, &group->MI);

    return 0;
}

/* compute photo to image equation */
int Compute_ref_equation(struct Ortho_Image_Group *group)
{
    group->ref_equation_stat = I_compute_ref_equations(
        &group->photo_points, group->E12, group->N12, group->E21, group->N21);

    return 0;
}
