Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef MCL_3DL_VEC3_H
00031 #define MCL_3DL_VEC3_H
00032
00033 namespace mcl_3dl
00034 {
00035 class Vec3
00036 {
00037 public:
00038 float x_;
00039 float y_;
00040 float z_;
00041 Vec3(const float x, const float y, const float z)
00042 {
00043 x_ = x;
00044 y_ = y;
00045 z_ = z;
00046 }
00047 Vec3()
00048 {
00049 x_ = y_ = z_ = 0.0;
00050 }
00051 float& operator[](const size_t i)
00052 {
00053 switch (i)
00054 {
00055 case 0:
00056 return x_;
00057 break;
00058 case 1:
00059 return y_;
00060 break;
00061 case 2:
00062 return z_;
00063 break;
00064 default:
00065 break;
00066 }
00067 return x_;
00068 }
00069 float operator[](const size_t i) const
00070 {
00071 switch (i)
00072 {
00073 case 0:
00074 return x_;
00075 break;
00076 case 1:
00077 return y_;
00078 break;
00079 case 2:
00080 return z_;
00081 break;
00082 default:
00083 break;
00084 }
00085 return x_;
00086 }
00087 bool operator==(const Vec3& q) const
00088 {
00089 return x_ == q.x_ && y_ == q.y_ && z_ == q.z_;
00090 }
00091 bool operator!=(const Vec3& q) const
00092 {
00093 return !operator==(q);
00094 }
00095 Vec3 operator+(const Vec3& q) const
00096 {
00097 return Vec3(x_ + q.x_, y_ + q.y_, z_ + q.z_);
00098 }
00099 Vec3 operator-(const Vec3& q) const
00100 {
00101 return Vec3(x_ - q.x_, y_ - q.y_, z_ - q.z_);
00102 }
00103 Vec3 operator-() const
00104 {
00105 return Vec3(-x_, -y_, -z_);
00106 }
00107 Vec3 operator*(const float& s) const
00108 {
00109 return Vec3(x_ * s, y_ * s, z_ * s);
00110 }
00111 Vec3 operator/(const float& s) const
00112 {
00113 return Vec3(x_ / s, y_ / s, z_ / s);
00114 }
00115 Vec3& operator+=(const Vec3& q)
00116 {
00117 *this = *this + q;
00118 return *this;
00119 }
00120 Vec3& operator-=(const Vec3& q)
00121 {
00122 *this = *this - q;
00123 return *this;
00124 }
00125 Vec3& operator*=(const float& s)
00126 {
00127 *this = *this * s;
00128 return *this;
00129 }
00130 Vec3& operator/=(const float& s)
00131 {
00132 *this = *this / s;
00133 return *this;
00134 }
00135 float dot(const Vec3& q) const
00136 {
00137 return x_ * q.x_ + y_ * q.y_ + z_ * q.z_;
00138 }
00139 Vec3 cross(const Vec3& q) const
00140 {
00141 return Vec3(y_ * q.z_ - z_ * q.y_,
00142 z_ * q.x_ - x_ * q.z_,
00143 x_ * q.y_ - y_ * q.x_);
00144 }
00145 Vec3 times(const Vec3& q) const
00146 {
00147 return Vec3(x_ * q.x_, y_ * q.y_, z_ * q.z_);
00148 }
00149 float norm() const
00150 {
00151 return sqrtf(dot(*this));
00152 }
00153 Vec3 normalized() const
00154 {
00155 return *this / norm();
00156 }
00157 };
00158 }
00159
00160 #endif // MCL_3DL_VEC3_H