14 #define PI (3.14159265358979324)
17 #define HALFPI (PI*0.5)
20 #define TWOPI (PI*2.0)
23 template <
typename T>
class Point3;
45 :
x(_x),
y(_y),
z(_z) {};
51 :
x(n[0]),
y(n[1]),
z(n[2]) {}
55 :
x( -sin(theta) * cos(phi) ),
56 y( -sin(theta) * sin(phi) ),
74 x += dir.
x * distance;
75 y += dir.
y * distance;
76 z += dir.
z * distance;
157 float p = atan2(
x,
z);
158 return (p < 0.0) ? p +
TWOPI : p;
175 template <
typename T>
179 a.
z * b.
x - a.
x * b.
z,
180 a.
x * b.
y - a.
y * b.
x);
183 template <
typename T>
186 return (x*a.
x + y*a.
y + z*a.
z);
189 template <
typename T>
195 template <
typename T>
198 *
this /= Magnitude();
203 template <
typename T>
206 if (abs(v1.
x) > abs(v1.
y))
208 T invLen = 1.0 / sqrt(v1.
x * v1.
x + v1.
z * v1.
z);
213 T invLen = 1.0 / sqrt(v1.
y * v1.
y + v1.
z * v1.
z);
216 *v3 =
Cross(v1, *v2);
219 template <
typename T>
222 if (view.
Dot(normal) < .1)
228 *right =
Cross(view, normal);
229 *forward =
Cross(*right, normal);