src/rcrt/math/Vec4D.cpp

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

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