src/rcrt/math/Vec2D.cpp

Go to the documentation of this file.
00001 #include <cmath>
00002 #include "Vec2D.h"
00003 
00004 namespace rcrt
00005 {
00006 
00007 
00008 Vec2D::Vec2D()
00009 {
00010         values[0] = values[1] = 0;
00011 }
00012 
00013 
00014 Vec2D::Vec2D(float xc, float yc)
00015 {
00016         values[0] = xc;
00017         values[1] = yc;
00018 }
00019 
00020 
00021 Vec2D::Vec2D(const Vec2D& vec)
00022 {
00023         assign(vec);
00024 }
00025 
00026 
00027 Vec2D::~Vec2D()
00028 {
00029 }
00030 
00031 
00032 void Vec2D::assign(const Vec2D& vec)
00033 {
00034         if(&vec != this){
00035                 values[0] = vec.values[0];
00036                 values[1] = vec.values[1];
00037         }
00038 }
00039 
00040 
00041 
00042 const Vec2D& Vec2D::operator= (const Vec2D& vec)
00043 {
00044         assign(vec);
00045                 
00046         return *this;
00047 }
00048 
00049 
00050 Vec2D Vec2D::operator+ (const Vec2D& vec) const
00051 {
00052         return Vec2D(values[0]+vec.values[0],
00053                         values[1]+vec.values[1]);
00054 }
00055 
00056 
00057 Vec2D Vec2D::operator- (const Vec2D& vec) const
00058 {
00059         return Vec2D(values[0]-vec.values[0],
00060                         values[1]-vec.values[1]);
00061 }
00062 
00063 
00064 float Vec2D::operator* (const Vec2D& vec) const
00065 {
00066         return values[0]*vec.values[0]+
00067         values[1]*vec.values[1];
00068 }
00069 
00070 
00071 Vec2D Vec2D::operator* (const float f) const
00072 {
00073         return Vec2D(values[0]*f,values[1]*f);
00074 }
00075 
00076 
00077 Vec2D Vec2D::operator/ (const float f) const
00078 {
00079         float g = 1/f;
00080         return Vec2D(values[0]*g,values[1]*g);
00081 }
00082 
00083 float Vec2D::operator[] (int i) const
00084 {
00085         return values[i];
00086 }
00087 
00088 float& Vec2D::operator[] (int i)
00089 {
00090         return values[i];
00091 }
00092 
00093 Vec2D Vec2D::abs() const
00094 {
00095         return Vec2D(fabs(values[0]),fabs(values[1]));
00096 }
00097 
00098 
00099 const Vec2D& Vec2D::normalize()
00100 {
00101         float n = 1/norm();
00102         values[0] *= n;
00103         values[1] *= n;
00104         
00105         return *this;
00106 }
00107 
00108 
00109 Vec2D Vec2D::normalized() const
00110 {
00111         return *this/norm();
00112 }
00113 
00114 
00115 float Vec2D::norm() const
00116 {
00117         return sqrt(values[0]*values[0]+values[1]*values[1]);
00118 }
00119 
00120 float Vec2D::det(const Vec2D& vec) const
00121 {
00122         return values[0]*vec.values[1]-values[1]*vec.values[0];
00123 }
00124 
00125 const float& Vec2D::x() const
00126 {
00127         return values[0];
00128 }
00129 
00130 
00131 const float& Vec2D::y() const
00132 {
00133         return values[1];
00134 }
00135 
00136 }

Generated on Thu Jan 31 19:26:19 2008 for RenderingCompetitionRayTracer by  doxygen 1.5.3