Go to the documentation of this file.
20 TRACE(5, (
"Bad input dimensions\n"));
24 for (i = 1; i < 4; i++) qout->
pData[i] = -qin->
pData[i];
39 TRACE(5, (
"Bad input dimensions\n"));
62 TRACE(5, (
"Bad input dimensions\n"));
65 for (i = 0; i < 3; i++) out->
pData[i] = in->
pData[i+1];
78 TRACE(5, (
"Bad input dimensions\n"));
82 for (i = 0; i < 3; i++) out->
pData[i+1] = in->
pData[i];
98 TRACE(5, (
"Bad input dimensions\n"));
102 for (i = 0; i < 3; i++) theta += in->
pData[i]*in->
pData[i];
105 out->
pData[0] = cos(theta / 2.0);
106 for (i = 0; i < 3; i++) out->
pData[i+1] = coeff_im * in->
pData[i] / 2.0;
116 double cosad2, cosbd2, coscd2, sinad2, sinbd2, sincd2;
119 TRACE(5, (
"Bad input dimensions\n"));
130 out->
pData[0] = cosad2*cosbd2*coscd2 - sinad2*sinbd2*sincd2;
131 out->
pData[1] = cosbd2*coscd2*sinad2 + cosad2*sinbd2*sincd2;
132 out->
pData[2] = cosad2*coscd2*sinbd2 - cosbd2*sinad2*sincd2;
133 out->
pData[3] = cosad2*cosbd2*sincd2 + coscd2*sinad2*sinbd2;
149 TRACE(5, (
"Bad input dimensions\n"));
152 for (i = 0; i < 4; i++ ) out -= (q1->
pData[i] * q2->
pData[i]);
161 double a, b, c, d, asq, bsq, csq, dsq;
168 TRACE(5, (
"Bad input dimensions\n"));
172 asq = a * a; bsq = b * b; csq = c * c; dsq = d * d;
194 TRACE(5, (
"Bad input dimensions\n"));
215 TRACE(5, (
"Bad input dimensions\n"));
230 double coeff_a, coeff_b, theta = 0.0;
236 TRACE(5, (
"Bad input dimensions\n"));
243 for (i = 0; i < 3; i++ ) theta += pow(in->
pData[i], 2.0);
249 coeff_b = coeff_b*coeff_b / 2.0;
257 for (i = 0; i < 9; i++ ) out->
pData[i] += (coeff_a * Am.
pData[i] + coeff_b * Bm.
pData[i]);
271 double coeff, theta = 0;
277 TRACE(5, (
"Bad input dimensions\n"));
287 for (i = 0; i < 3; i++ ) theta +=
matrix_get(in, i, i);
296 for (i = 0; i < 3; i++) out->
pData[i] *= -coeff;
315 TRACE(5, (
"Bad input dimensions\n"));
352 TRACE(5, (
"Bad input dimensions\n"));
373 if (in >= 0.0)
return 1.0;
384 if (vec->
numCols < 1)
return 0;
388 if (vec->
numRows < 1)
return 0;
392 for ( i = 0; i < N; i++) val += (vec->
pData[i]*vec->
pData[i]);
393 if (val <= 0.0)
return 0;
395 for ( i = 0; i < N; i++) vec->
pData[i] /= val;
void cont_cross_product(matrix_double_t *inAm, matrix_double_t *inBm, matrix_double_t *outm)
Cross product operation, To be migrated to the cont_math stack.
int cont_SU2_hat(matrix_double_t *in, matrix_double_t *out)
The hat map on SU(2)
int cont_normalize(matrix_double_t *vec)
Normalizes the vector.
void matrix_allocate(matrix_double_t *matrix, int numRows, int numCols)
Allocate memory for a matrix struct of given dimensions.
void matrix_zero(matrix_double_t *matrix)
Set all antries of a matrix to zero.
Matrix object used for all matrix manipulation.
void mat_trans(matrix_double_t *Amat, matrix_double_t *ATmat)
Matrix transposition, A^T <– transpose(A), asserts that this is done correctly.
void matrix_identity(matrix_double_t *matrix)
Set a square matrix to the identity matrix.
int cont_SU2_product(matrix_double_t *q, matrix_double_t *p, matrix_double_t *out)
Product of two elements of SU(2)
double cont_sinc(double x)
Evaluates the sinc function as f(x) = sin(x)/x.
int cont_SO3_Log(matrix_double_t *in, matrix_double_t *out)
The Log map on SO3.
void matrix_set(matrix_double_t *mat, int row, int column, double value)
Set an entry of a matrix (irrespective of the used memory layout)
int cont_SO3_vee(matrix_double_t *in, matrix_double_t *out)
The hat operator on SO3.
void mat_mul(matrix_double_t *Amat, matrix_double_t *Bmat, matrix_double_t *Cmat)
and asserts that this is done correctly
int cont_SU2_triple(double a, double b, double c, matrix_double_t *out)
Computes a triple product on SU(2)
double cont_SO3_distance(matrix_double_t *R1, matrix_double_t *R2)
The distance Phi(R1, R2) defined on SO3.
void mat_sub_inplace(matrix_double_t *Amat, matrix_double_t *Bmat)
In-place subtraction addition, A <– A - B, asserts that this is done correctly.
int cont_SO3_hat(matrix_double_t *in, matrix_double_t *out)
The hat operator on SO3.
int cont_quat_2_SO3(matrix_double_t *q, matrix_double_t *R)
Embedding relating SU(2) to SO(3)
int cont_SU2_conjugate(matrix_double_t *qin, matrix_double_t *qout)
Conjugate an element of SU(2)
double cont_sign_func(double in)
Takes the sign of the input, returning +1 if the input is zero.
double cont_dot_product(matrix_double_t *vecA, matrix_double_t *vecB)
Evaluates the dot product of two vectors.
int cont_SU2_vee(matrix_double_t *in, matrix_double_t *out)
The vee map on SU(2)
double cont_SU2_distance(matrix_double_t *q1, matrix_double_t *q2)
Evaluate distance Gamma(q1, q2) in [0,2] defined on SU2.
int cont_SO3_Exp(matrix_double_t *in, matrix_double_t *out)
The Exp map on SO3.
int cont_SU2_Exp(matrix_double_t *in, matrix_double_t *out)
The Exp map on SU(2)
double matrix_get(matrix_double_t *mat, int row, int column)
Get an entry of a matrix (irrespective of the used memory layout)