summaryrefslogtreecommitdiff
path: root/src/rotate.h
diff options
context:
space:
mode:
authorAnthony LaTorre <telatorre@gmail.com>2011-05-07 20:32:35 -0400
committerAnthony LaTorre <telatorre@gmail.com>2011-05-07 20:32:35 -0400
commit16736eeae08d9627ad751c65919900ae9191a08f (patch)
tree602af6b7fdfd32c9cdc7fc3b85e6c8e247209197 /src/rotate.h
parent76a6dd33cdaf4b583b7e8353f198925ddb4a4685 (diff)
downloadchroma-16736eeae08d9627ad751c65919900ae9191a08f.tar.gz
chroma-16736eeae08d9627ad751c65919900ae9191a08f.tar.bz2
chroma-16736eeae08d9627ad751c65919900ae9191a08f.zip
tie fighter
Diffstat (limited to 'src/rotate.h')
-rw-r--r--src/rotate.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/rotate.h b/src/rotate.h
new file mode 100644
index 0000000..52d6d6a
--- /dev/null
+++ b/src/rotate.h
@@ -0,0 +1,24 @@
+#ifndef __ROTATE_H__
+#define __ROTATE_H__
+
+__device__ const Matrix IDENTITY_MATRIX = {1,0,0,0,1,0,0,0,1};
+__device__ const Matrix ZERO_MATRIX = {0,0,0,0,0,0,0,0,0};
+
+__device__ __host__ Matrix make_rotation_matrix(float phi, const float3 &n)
+{
+ /* rotate points counterclockwise, when looking towards +infinity,
+ through an angle `phi` about the axis `n`. */
+
+ float cos_phi = cosf(phi);
+ float sin_phi = sinf(phi);
+
+ return IDENTITY_MATRIX*cos_phi + (1-cos_phi)*outer(n,n) +
+ sin_phi*make_matrix(0,n.z,-n.y,-n.z,0,n.x,n.y,-n.x,0);
+}
+
+__device__ __host__ float3 rotate(const float3 &a, float phi, const float3 &n)
+{
+ return make_rotation_matrix(phi,n)*a;
+}
+
+#endif