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