blender file uvedit_parametrizer.c

Hello !
Can you mathmaticiens, help me ! I’m stuck for weaks to understand this;(least squares conformal mapping)

In the file uvedit_parametrizer.c this part of code :

/* angle based lscm formulation */

ratio = (sina3 == 0.0f) ? 1.0f : sina2 / sina3;
cosine = cosf(a1) * ratio;
sine = sina1 * ratio;

    EIG_linear_solver_matrix_add(context, row, 2 * v1->u.id,   cosine - 1.0f);
    EIG_linear_solver_matrix_add(context, row, 2 * v1->u.id + 1, -sine);
    EIG_linear_solver_matrix_add(context, row, 2 * v2->u.id,   -cosine);
    EIG_linear_solver_matrix_add(context, row, 2 * v2->u.id + 1, sine);
    EIG_linear_solver_matrix_add(context, row, 2 * v3->u.id,   1.0);
    row++;

    EIG_linear_solver_matrix_add(context, row, 2 * v1->u.id,   sine);
    EIG_linear_solver_matrix_add(context, row, 2 * v1->u.id + 1, cosine - 1.0f);
    EIG_linear_solver_matrix_add(context, row, 2 * v2->u.id,   -sine);
    EIG_linear_solver_matrix_add(context, row, 2 * v2->u.id + 1, -cosine);
    EIG_linear_solver_matrix_add(context, row, 2 * v3->u.id + 1, 1.0);
    row++;  Blender (sparsematrix) prepares a matrix. Why use sine and cosine, and not use angle directly to each vertices, why 2 rows? Any explanations? Thanks!