1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#ifndef __LINALG_H__
#define __LINALG_H__
__device__ __host__ float3 operator- (const float3 &a)
{
return make_float3(-a.x, -a.y, -a.z);
}
__device__ __host__ float3 operator+ (const float3 &a, const float3 &b)
{
return make_float3(a.x+b.x, a.y+b.y, a.z+b.z);
}
__device__ __host__ void operator+= (float3 &a, const float3 &b)
{
a.x += b.x;
a.y += b.y;
a.z += b.z;
}
__device__ __host__ float3 operator- (const float3 &a, const float3 &b)
{
return make_float3(a.x-b.x, a.y-b.y, a.z-b.z);
}
__device__ __host__ void operator-= (float3 &a, const float3 &b)
{
a.x -= b.x;
a.y -= b.y;
a.z -= b.z;
}
__device__ __host__ float3 operator+ (const float3 &a, const float &c)
{
return make_float3(a.x+c, a.y+c, a.z+c);
}
__device__ __host__ void operator+= (float3 &a, const float &c)
{
a.x += c;
a.y += c;
a.z += c;
}
__device__ __host__ float3 operator+ (const float &c, const float3 &a)
{
return make_float3(c+a.x, c+a.y, c+a.z);
}
__device__ __host__ float3 operator- (const float3 &a, const float &c)
{
return make_float3(a.x-c, a.y-c, a.z-c);
}
__device__ __host__ void operator-= (float3 &a, const float &c)
{
a.x -= c;
a.y -= c;
a.z -= c;
}
__device__ __host__ float3 operator- (const float &c, const float3& a)
{
return make_float3(c-a.x, c-a.y, c-a.z);
}
__device__ __host__ float3 operator* (const float3 &a, const float &c)
{
return make_float3(a.x*c, a.y*c, a.z*c);
}
__device__ __host__ void operator*= (float3 &a, const float &c)
{
a.x *= c;
a.y *= c;
a.z *= c;
}
__device__ __host__ float3 operator* (const float &c, const float3& a)
{
return make_float3(c*a.x, c*a.y, c*a.z);
}
__device__ __host__ float3 operator/ (const float3 &a, const float &c)
{
return make_float3(a.x/c, a.y/c, a.z/c);
}
__device__ __host__ void operator/= (float3 &a, const float &c)
{
a.x /= c;
a.y /= c;
a.z /= c;
}
__device__ __host__ float3 operator/ (const float &c, const float3 &a)
{
return make_float3(c/a.x, c/a.y, c/a.z);
}
__device__ __host__ float dot(const float3 &a, const float3 &b)
{
return a.x*b.x + a.y*b.y + a.z*b.z;
}
__device__ __host__ 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__ __host__ float norm(const float3 &a)
{
return sqrtf(dot(a,a));
}
__device__ __host__ float3 normalize(const float3 &a)
{
return a/norm(a);
}
#endif
|