diff options
| author | Anthony LaTorre <telatorre@gmail.com> | 2011-05-07 20:32:35 -0400 |
|---|---|---|
| committer | Anthony LaTorre <telatorre@gmail.com> | 2011-05-07 20:32:35 -0400 |
| commit | 16736eeae08d9627ad751c65919900ae9191a08f (patch) | |
| tree | 602af6b7fdfd32c9cdc7fc3b85e6c8e247209197 /src/rotate.h | |
| parent | 76a6dd33cdaf4b583b7e8353f198925ddb4a4685 (diff) | |
| download | chroma-16736eeae08d9627ad751c65919900ae9191a08f.tar.gz chroma-16736eeae08d9627ad751c65919900ae9191a08f.tar.bz2 chroma-16736eeae08d9627ad751c65919900ae9191a08f.zip | |
tie fighter
Diffstat (limited to 'src/rotate.h')
| -rw-r--r-- | src/rotate.h | 24 |
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 |
