aboutsummaryrefslogtreecommitdiff
path: root/vector.c
diff options
context:
space:
mode:
Diffstat (limited to 'vector.c')
-rw-r--r--vector.c26
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);
+}