📄 vector3.h
字号:
#include <math.h>
#include <iostream.h>
#define EPSILON (0.000001)#define SQR(x) ((x)*(x))inline int TooSmall (const float x) { if (fabs(x)<EPSILON) return 1; else return 0;}
class Vector {public: float v[3]; Vector(); Vector(float e1, float e2, float e3); Vector(const Vector& N); const Vector& operator= (const Vector&); float& operator[](unsigned int i) { return v[i]; } Vector& operator+=(const Vector &N); Vector& operator-=(const Vector &N); Vector operator+(const Vector &N) const; Vector operator-(const Vector &N) const; Vector operator-() const; // unary minus friend Vector operator*(const float d, const Vector& N); float Norm() const; Vector& Unitize(); void Print (char str[]=NULL) const; friend ostream& operator<<(ostream& out, const Vector& N);};inline Vector::Vector() {
int i;
for(i=0;i<3;i++) v[i] = 0.0;
}
inline Vector::Vector(float e0, float e1, float e2) {
v[0] = e0; v[1] = e1; v[2] = e2;
}
inline Vector::Vector(const Vector& N) {
v[0] = N.v[0];
v[1] = N.v[1];
v[2] = N.v[2];
}
inline const Vector& Vector::operator= (const Vector& N) {
v[0] = N.v[0];
v[1] = N.v[1];
v[2] = N.v[2];
return *this;
}
inline Vector& Vector::operator+=(const Vector &N) // usage: A += N
{
for(int i=0;i<3;i++) v[i] += N.v[i];
return *this;
}
inline Vector& Vector::operator-=(const Vector &N) // usage: A -= N
{
for(int i=0;i<3;i++) v[i] -= N.v[i];
return *this;
}
inline Vector Vector::operator+(const Vector &N) const // usage: A + B
{
Vector R(*this);
R += N;
return R;
}
inline Vector Vector::operator-(const Vector &N) const // usage: A - B
{
Vector R(*this);
R -= N;
return R;
}
inline Vector Vector::operator-() const // usage: -A
{
Vector R(*this);
for(int i=0;i<3;i++) R[i] = -R[i];
return R;
}
inline Vector operator*(const float d, const Vector& N) // usage: d * A
{
Vector R(N);
for(int i=0; i<3; i++) R[i] *= d;
return R;
}
inline float Vector::Norm() const
{
float ss = 0.0;
for(int i=0; i<3; ++i) ss+=v[i]*v[i];
return (float)sqrt(ss);
}
inline Vector& Vector::Unitize()
{
float ss = Norm();
if(TooSmall(ss)) {v[0] = 1.0; v[1] = 0.0; v[2] = 0.0;}
else for(int i=0; i<3; ++i) v[i] /= ss;
return *this;
}
inline void Vector::Print(char str[]) const {
if (str)
printf("%s = ",str);
printf("(%11.7f",v[0]);
for(int i=1; i<3; i++) printf(",%11.7f",v[i]);
printf(")\n");
}
inline ostream& operator<<(ostream& out, const Vector& N)
{
for( int i=0;i<2;i++) out << N.v[i] << ",";
out << N.v[2];
return out;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -