40 #include "pf_vector.h" 46 pf_vector_t pf_vector_zero()
59 int pf_vector_finite(pf_vector_t a)
63 for (i = 0; i < 3; i++)
72 void pf_vector_fprintf(pf_vector_t a, FILE *file,
const char *fmt)
76 for (i = 0; i < 3; i++)
78 fprintf(file, fmt, a.v[i]);
88 pf_vector_t pf_vector_add(pf_vector_t a, pf_vector_t b)
92 c.v[0] = a.v[0] + b.v[0];
93 c.v[1] = a.v[1] + b.v[1];
94 c.v[2] = a.v[2] + b.v[2];
101 pf_vector_t pf_vector_sub(pf_vector_t a, pf_vector_t b)
105 c.v[0] = a.v[0] - b.v[0];
106 c.v[1] = a.v[1] - b.v[1];
107 c.v[2] = a.v[2] - b.v[2];
114 pf_vector_t pf_vector_coord_add(pf_vector_t a, pf_vector_t b)
118 c.v[0] = b.v[0] + a.v[0] * cos(b.v[2]) - a.v[1] * sin(b.v[2]);
119 c.v[1] = b.v[1] + a.v[0] * sin(b.v[2]) + a.v[1] * cos(b.v[2]);
120 c.v[2] = b.v[2] + a.v[2];
121 c.v[2] = atan2(sin(c.v[2]), cos(c.v[2]));
128 pf_vector_t pf_vector_coord_sub(pf_vector_t a, pf_vector_t b)
132 c.v[0] = +(a.v[0] - b.v[0]) * cos(b.v[2]) + (a.v[1] - b.v[1]) * sin(b.v[2]);
133 c.v[1] = -(a.v[0] - b.v[0]) * sin(b.v[2]) + (a.v[1] - b.v[1]) * cos(b.v[2]);
134 c.v[2] = a.v[2] - b.v[2];
135 c.v[2] = atan2(sin(c.v[2]), cos(c.v[2]));
142 pf_matrix_t pf_matrix_zero()
147 for (i = 0; i < 3; i++)
148 for (j = 0; j < 3; j++)
156 int pf_matrix_finite(pf_matrix_t a)
160 for (i = 0; i < 3; i++)
161 for (j = 0; j < 3; j++)
162 if (!finite(a.m[i][j]))
170 void pf_matrix_fprintf(pf_matrix_t a, FILE *file,
const char *fmt)
174 for (i = 0; i < 3; i++)
176 for (j = 0; j < 3; j++)
178 fprintf(file, fmt, a.m[i][j]);
230 void pf_matrix_unitary(pf_matrix_t *r, pf_matrix_t *d, pf_matrix_t a)
248 for (i = 0; i < 3; i++)
250 for (j = 0; j < 3; j++)
253 aa[i][j] = a.m[i][j];
264 eigen_decomposition(aa,evec,eval);
266 *d = pf_matrix_zero();
267 for (i = 0; i < 3; i++)
270 d->m[i][i] = eval[i];
271 for (j = 0; j < 3; j++)
274 r->m[i][j] = evec[i][j];