src/rcrt/math/HCoord4D.cpp

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

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