⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector3.h

📁 virtual reality project. This algorithm for building large image to Volume rendering. Using directx
💻 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 + -