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 }