00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_VECTOR_H
00027 #define NL_VECTOR_H
00028
00029 #include "nel/misc/types_nl.h"
00030
00031 #include <math.h>
00032 #include <string>
00033
00034 #include "nel/misc/stream.h"
00035
00036 namespace NLMISC
00037 {
00038
00039 class IStream;
00040
00041
00048 class CVector
00049 {
00050 public:
00051 float x,y,z;
00052
00053 public:
00055
00057
00059
00061
00062
00063 public:
00065
00066
00067
00069
00071
00073
00075
00076
00077 CVector &operator-=(const CVector &v);
00078 CVector &operator*=(float f);
00079 CVector &operator/=(float f);
00080 CVector operator+(const CVector &v) const;
00081 CVector operator-(const CVector &v) const;
00082 CVector operator*(float f) const;
00083 CVector operator/(float f) const;
00084 CVector operator-() const;
00086
00088
00089
00090 float operator*(const CVector &v) const;
00094 CVector operator^(const CVector &v) const;
00096 float norm() const;
00098 float sqrnorm() const;
00100 void normalize();
00102 CVector normed() const;
00104
00106
00107 void set(float _x, float _y, float _z);
00108 bool operator==(const CVector &v) const;
00109 bool operator!=(const CVector &v) const;
00110 bool isNull() const;
00112 bool operator<(const CVector &v) const;
00122 void sphericToCartesian(float r, float theta,float phi);
00128 void cartesianToSpheric(float &r, float &theta,float &phi) const;
00130 void minof(const CVector &a, const CVector &b);
00132 void maxof(const CVector &a, const CVector &b);
00134 void serial(IStream &f);
00136
00138 std::string asString() const;
00139
00140
00141 friend CVector operator*(float f, const CVector &v0);
00142 };
00143
00144
00145 }
00146
00147
00148 #include "nel/misc/vector_inline.h"
00149
00150
00151 #endif // NL_VECTOR_H
00152
00153