diff options
author | Stan Seibert <stan@mtrr.org> | 2011-09-03 09:21:36 -0400 |
---|---|---|
committer | Stan Seibert <stan@mtrr.org> | 2011-09-03 09:21:36 -0400 |
commit | 38f05bf761490def1886016524f328528b08f549 (patch) | |
tree | e0ee6555ee8bdf02a9e0b832a33707bcee06a3fa /src/transform.cu | |
parent | 48550062440c5b7f1479ecbe17fd4b024a90fca2 (diff) | |
parent | 707ca1b366f11032682cc864ca2848905e6b485c (diff) | |
download | chroma-38f05bf761490def1886016524f328528b08f549.tar.gz chroma-38f05bf761490def1886016524f328528b08f549.tar.bz2 chroma-38f05bf761490def1886016524f328528b08f549.zip |
merge
Diffstat (limited to 'src/transform.cu')
-rw-r--r-- | src/transform.cu | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/transform.cu b/src/transform.cu new file mode 100644 index 0000000..57bd509 --- /dev/null +++ b/src/transform.cu @@ -0,0 +1,47 @@ +//-*-c-*- + +#include "linalg.h" +#include "rotate.h" + +extern "C" +{ + +/* Translate the points `a` by the vector `v` */ +__global__ void translate(int nthreads, float3 *a, float3 v) +{ + int id = blockIdx.x*blockDim.x + threadIdx.x; + + if (id >= nthreads) + return; + + a[id] += v; +} + +/* Rotate the points `a` through an angle `phi` counter-clockwise about the + axis `axis` (when looking towards +infinity). */ +__global__ void rotate(int nthreads, float3 *a, float phi, float3 axis) +{ + int id = blockIdx.x*blockDim.x + threadIdx.x; + + if (id >= nthreads) + return; + + a[id] = rotate(a[id], phi, axis); +} + +/* Rotate the points `a` through an angle `phi` counter-clockwise + (when looking towards +infinity along `axis`) about the axis defined + by the point `point` and the vector `axis` . */ +__global__ void rotate_around_point(int nthreads, float3 *a, float phi, float3 axis, float3 point) +{ + int id = blockIdx.x*blockDim.x + threadIdx.x; + + if (id >= nthreads) + return; + + a[id] -= point; + a[id] = rotate(a[id], phi, axis); + a[id] += point; +} + +} // extern "c" |