diff -r 79b516a3803d -r 76b7bd51d64a src/vector.h --- a/src/vector.h Fri Nov 30 00:44:51 2007 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* - * C++ RayTracer - * file: vector.h - * - * Radek Brich, 2006 - */ - -#ifndef VECTOR_H -#define VECTOR_H - -#include -#include - -using namespace std; - -class Vector3 -{ -public: - // data - union { - struct { - float x, y, z; - }; - struct { - float r, g, b; - }; - float cell[3]; - }; - - // constructors - Vector3(): x(0.0f), y(0.0f), z(0.0f) {}; - Vector3(float ax, float ay, float az): x(ax), y(ay), z(az) {}; - - // index operator - float &operator[](int index) { return cell[index]; }; - - bool operator==(Vector3 &v) { return x==v.x && y==v.y && z==v.z; }; - - // normalize - Vector3 normalize() - { - float f = 1.0f / mag(); - x *= f; - y *= f; - z *= f; - return *this; - } - - // get normalized copy - Vector3 unit() - { - Vector3 u(*this); - return u.normalize();; - } - - // square magnitude, magnitude - float mag2() { return x * x + y * y + z * z; } - float mag() { return sqrtf(mag2()); } - - // negative - Vector3 operator-() { return Vector3(-x, -y, -z); } - - // accumulate - Vector3 operator+=(const Vector3 &v) - { - x += v.x; - y += v.y; - z += v.z; - return *this; - }; - - // sum - friend Vector3 operator+(const Vector3 &a, const Vector3 &b) - { - return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); - }; - - // difference - friend Vector3 operator-(const Vector3 &a, const Vector3 &b) - { - return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); - }; - - // dot product - friend float dot(const Vector3 &a, const Vector3 &b) - { - return a.x * b.x + a.y * b.y + a.z * b.z; - }; - - // cross product - friend Vector3 cross(const Vector3 &a, const Vector3 &b) - { - return Vector3(a.y * b.z - a.z * b.y, - a.z * b.x - a.x * b.z, - a.x * b.y - a.y * b.x); - }; - - // product of vector and scalar - friend Vector3 operator*(const Vector3 &v, const float &f) - { - return Vector3(f * v.x, f * v.y, f * v.z); - } - - friend Vector3 operator*(const float &f, const Vector3 &v) - { - return v * f; - }; - - // vector plus scalar - friend Vector3 operator+(const Vector3 &v, const float &f) - { - return Vector3(v.x + f, v.y + f, v.z + f); - } - - // vector minus scalar - friend Vector3 operator-(const Vector3 &v, const float &f) - { - return Vector3(v.x - f, v.y - f, v.z - f); - } - - // cell by cell product (only usable for colours) - friend Vector3 operator*(const Vector3 &a, const Vector3 &b) - { - return Vector3(a.x * b.x, a.y * b.y, a.z * b.z); - }; - - // print - friend ostream & operator<<(ostream &st, const Vector3 &v) - { - return st << "(" << v.x << ", " << v.y << ", " << v.z << ")"; - } -}; - -typedef Vector3 Colour; - -#endif