Example #1
0
File: dcm.cpp Project: barthess/u
/* bring dcm matrix in order - adjust values to make
 * orthonormal (or at least closer to orthonormal) */
static void dcm_orthonormalize(float dcm[3][3]){
  //err = X . Y ,  X = X - err/2 * Y , Y = Y - err/2 * X  (DCMDraft2 Eqn.19)
  float err = vector3d_dot((float*)(dcm[0]),(float*)(dcm[1]));
  float delta[2][3];
  vector3d_scale(-err/2,(float*)(dcm[1]),(float*)(delta[0]));
  vector3d_scale(-err/2,(float*)(dcm[0]),(float*)(delta[1]));
  vector3d_add((float*)(dcm[0]),(float*)(delta[0]),(float*)(dcm[0]));
  vector3d_add((float*)(dcm[1]),(float*)(delta[1]),(float*)(dcm[1]));

  //Z = X x Y  (DCMDraft2 Eqn. 20) ,
  vector3d_cross((float*)(dcm[0]),(float*)(dcm[1]),(float*)(dcm[2]));
  //re-nomralization
  vector3d_normalize((float*)(dcm[0]));
  vector3d_normalize((float*)(dcm[1]));
  vector3d_normalize((float*)(dcm[2]));
}
Example #2
0
static char * test_arithmatic() {

    Vector3D vector1 = vector3d(1.0, 4.0, 2.0);
    Vector3D vector2 = vector3d(3.0, 1.0, 2.0);
    Vector3D vector3 = vector3d(3.0, 4.0, -1.0);
    Vector3D out     = vector3d_subtract(
        vector3d_add(vector2, vector3),
        vector3d_scale(2, vector1)
    );

    mu_assert(out.x ==  4, "Error: Vector3D x is not correct");
    mu_assert(out.y == -3, "Error: Vector3D y is not correct");
    mu_assert(out.z == -3, "Error: Vector3D z is not correct");

    return 0;
}