src/vector.h
branchpyrit
changeset 22 76b7bd51d64a
parent 21 79b516a3803d
child 23 7e258561a690
--- 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 <math.h>
-#include <iostream>
-
-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