diff options
Diffstat (limited to 'vector.c')
-rw-r--r-- | vector.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/vector.c b/vector.c new file mode 100644 index 0000000..d0e304a --- /dev/null +++ b/vector.c @@ -0,0 +1,26 @@ +#include "vector.h" +#include <math.h> + +void normalize(double *a) +{ + double c; + c = NORM(a); + DIV(a,c); +} + +void rotate(double *dest, double *v, double *n, double phi) +{ + /* Rotate the vector `v` through an angle `phi` about the axis `n`. */ + double temp[3], cos_theta; + + cos_theta = cos(phi); + + COPY(dest,v); + MUL(dest,cos_theta); + CROSS(temp,n,v); + MUL(temp,sin(phi)); + ADD(dest,dest,temp); + COPY(temp,n); + MUL(temp,DOT(n,v)*(1-cos_theta)); + ADD(dest,dest,temp); +} |