123        Vector3() : x(0.0f), y(0.0f), z(0.0f) {}
 
  125        Vector3(T x, T y, T z) : x(x), y(y), z(z) {}
 
  129        void Set(T x, T y, T z) {
 
  136            float s = 1.0f / std::sqrt(x * x + y * y + z * z);
 
  149            return Vector3(y * v.z - z * v.y,
 
  154        T Dot(
const Vector3& v)
 const {
 
  155            return x * v.x + y * v.y + z * v.z;
 
  159            return Vector3(x + v.x, y + v.y, z + v.z);
 
  162        void operator+=(
const Vector3& v) {
 
  168        void operator-=(
const Vector3& v) {
 
  174        void operator/=(T s) {
 
  181            return Vector3(x - v.x, y - v.y, z - v.z);
 
  189            return Vector3(x * s, y * s, z * s);
 
  193            return Vector3(x / s, y / s, z / s);
 
  196        bool operator==(
const Vector3& v)
 const {
 
  197            return x == v.x && y == v.y && z == v.z;
 
  201            return Vector3(x * (1 - t) + v.x * t,
 
  202                           y * (1 - t) + v.y * t,
 
  203                           z * (1 - t) + v.z * t);
 
  207            return Vector3(a.x * (1 - t) + b.x * t,
 
  208                           a.y * (1 - t) + b.y * t,
 
  209                           a.z * (1 - t) + b.z * t);
 
  213            return sqrtf(powf(a.x - b.x, 2) + powf(a.y - b.y, 2) + powf(a.z - b.z, 2));
 
  216        const T* Pointer()
 const {
 
  220        template <
typename P>
 
 
  238        Vector4(T x, T y, T z, T w) : x(x), y(y), z(z), w(w) {}
 
  244        void Set(T x, T y, T z, T w) {
 
  252        T Dot(
const Vector4& v)
 const {
 
  253            return x * v.x + y * v.y + z * v.z + w * v.w;
 
  257            return Vector4(-x, -y, -z, -w);
 
  261            return Vector4(x * (1 - t) + v.x * t,
 
  262                           y * (1 - t) + v.y * t,
 
  263                           z * (1 - t) + v.z * t,
 
  264                           w * (1 - t) + v.w * t);
 
  268            return Vector4(a.x * (1 - t) + b.x * t,
 
  269                           a.y * (1 - t) + b.y * t,
 
  270                           a.z * (1 - t) + b.z * t,
 
  271                           a.w * (1 - t) + b.w * t);
 
  275            return sqrtf(powf(a.x - b.x, 2) + powf(a.y - b.y, 2) + powf(a.z - b.z, 2) + powf(a.w - b.w, 2));
 
  279            return Vector4(x + v.x, y + v.y, z + v.z, w + v.w);
 
  283            return Vector4(x * s, y * s, z * s, w * s);
 
  286        const T* Pointer()
 const {