diff options
Diffstat (limited to 'src/linalg.h')
-rw-r--r-- | src/linalg.h | 157 |
1 files changed, 103 insertions, 54 deletions
diff --git a/src/linalg.h b/src/linalg.h index fe6b1b2..35b2423 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -1,121 +1,170 @@ #ifndef __LINALG_H__ #define __LINALG_H__ -__device__ __host__ float3 operator- (const float3 &a) +__device__ float3 +operator- (const float3 &a) { - return make_float3(-a.x, -a.y, -a.z); + return make_float3(-a.x, -a.y, -a.z); } -__device__ __host__ float3 operator+ (const float3 &a, const float3 &b) +__device__ float3 +operator* (const float3 &a, const float3 &b) { - return make_float3(a.x+b.x, a.y+b.y, a.z+b.z); + return make_float3(a.x*b.x, a.y*b.y, a.z*b.z); } -__device__ __host__ void operator+= (float3 &a, const float3 &b) +__device__ float3 +operator/ (const float3 &a, const float3 &b) { - a.x += b.x; - a.y += b.y; - a.z += b.z; + return make_float3(a.x/b.x, a.y/b.y, a.z/b.z); } -__device__ __host__ float3 operator- (const float3 &a, const float3 &b) +__device__ void +operator*= (float3 &a, const float3 &b) { - return make_float3(a.x-b.x, a.y-b.y, a.z-b.z); + a.x *= b.x; + a.y *= b.y; + a.z *= b.z; } -__device__ __host__ void operator-= (float3 &a, const float3 &b) +__device__ void +operator/= (float3 &a, const float3 &b) { - a.x -= b.x; - a.y -= b.y; - a.z -= b.z; + a.x /= b.x; + a.y /= b.y; + a.z /= b.z; } -__device__ __host__ float3 operator+ (const float3 &a, const float &c) +__device__ float3 +operator+ (const float3 &a, const float3 &b) { - return make_float3(a.x+c, a.y+c, a.z+c); + return make_float3(a.x+b.x, a.y+b.y, a.z+b.z); } -__device__ __host__ void operator+= (float3 &a, const float &c) +__device__ void +operator+= (float3 &a, const float3 &b) { - a.x += c; - a.y += c; - a.z += c; + a.x += b.x; + a.y += b.y; + a.z += b.z; } -__device__ __host__ float3 operator+ (const float &c, const float3 &a) +__device__ float3 +operator- (const float3 &a, const float3 &b) { - return make_float3(c+a.x, c+a.y, c+a.z); + return make_float3(a.x-b.x, a.y-b.y, a.z-b.z); } -__device__ __host__ float3 operator- (const float3 &a, const float &c) +__device__ void +operator-= (float3 &a, const float3 &b) { - return make_float3(a.x-c, a.y-c, a.z-c); + a.x -= b.x; + a.y -= b.y; + a.z -= b.z; } -__device__ __host__ void operator-= (float3 &a, const float &c) +__device__ float3 +operator+ (const float3 &a, const float &c) { - a.x -= c; - a.y -= c; - a.z -= c; + return make_float3(a.x+c, a.y+c, a.z+c); } -__device__ __host__ float3 operator- (const float &c, const float3& a) +__device__ void +operator+= (float3 &a, const float &c) { - return make_float3(c-a.x, c-a.y, c-a.z); + a.x += c; + a.y += c; + a.z += c; } -__device__ __host__ float3 operator* (const float3 &a, const float &c) +__device__ float3 +operator+ (const float &c, const float3 &a) { - return make_float3(a.x*c, a.y*c, a.z*c); + return make_float3(c+a.x, c+a.y, c+a.z); } -__device__ __host__ void operator*= (float3 &a, const float &c) +__device__ float3 +operator- (const float3 &a, const float &c) { - a.x *= c; - a.y *= c; - a.z *= c; + return make_float3(a.x-c, a.y-c, a.z-c); } -__device__ __host__ float3 operator* (const float &c, const float3& a) +__device__ void +operator-= (float3 &a, const float &c) { - return make_float3(c*a.x, c*a.y, c*a.z); + a.x -= c; + a.y -= c; + a.z -= c; } -__device__ __host__ float3 operator/ (const float3 &a, const float &c) +__device__ float3 +operator- (const float &c, const float3& a) { - return make_float3(a.x/c, a.y/c, a.z/c); + return make_float3(c-a.x, c-a.y, c-a.z); } -__device__ __host__ void operator/= (float3 &a, const float &c) +__device__ float3 +operator* (const float3 &a, const float &c) { - a.x /= c; - a.y /= c; - a.z /= c; + return make_float3(a.x*c, a.y*c, a.z*c); } -__device__ __host__ float3 operator/ (const float &c, const float3 &a) +__device__ void +operator*= (float3 &a, const float &c) { - return make_float3(c/a.x, c/a.y, c/a.z); + a.x *= c; + a.y *= c; + a.z *= c; } -__device__ __host__ float dot(const float3 &a, const float3 &b) +__device__ float3 +operator* (const float &c, const float3& a) { - return a.x*b.x + a.y*b.y + a.z*b.z; + return make_float3(c*a.x, c*a.y, c*a.z); } -__device__ __host__ float3 cross(const float3 &a, const float3 &b) +__device__ float3 +operator/ (const float3 &a, const float &c) { - return make_float3(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x); + return make_float3(a.x/c, a.y/c, a.z/c); } -__device__ __host__ float norm(const float3 &a) +__device__ void +operator/= (float3 &a, const float &c) { - return sqrtf(dot(a,a)); + a.x /= c; + a.y /= c; + a.z /= c; } -__device__ __host__ float3 normalize(const float3 &a) +__device__ float3 +operator/ (const float &c, const float3 &a) { - return a/norm(a); + return make_float3(c/a.x, c/a.y, c/a.z); +} + +__device__ float +dot(const float3 &a, const float3 &b) +{ + return a.x*b.x + a.y*b.y + a.z*b.z; +} + +__device__ float3 +cross(const float3 &a, const float3 &b) +{ + return make_float3(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x); +} + +__device__ float +norm(const float3 &a) +{ + return sqrtf(dot(a,a)); +} + +__device__ float3 +normalize(const float3 &a) +{ + return a/norm(a); } #endif |