📄 vector.h
字号:
/**
* Vector class.
* Common mathematical operations on vectors in R3.
*
**/
#ifndef __VECTOR_H__
#define __VECTOR_H__
#include <math.h>
//#include "StdAfx.h"
/**
* Vector3
**/
template <class T>
struct Vector3
{
// create a vector
Vector3 (T x_=0, T y_=0, T z_=0) : x(x_), y(y_), z(z_) {}
// set coordinates
void set (T x_, T y_, T z_) { x=x_; y=y_; z=z_; }
// norm
Vector3 normalize() const { return((*this) / norm()); }
double norm () const { return sqrt(normSquared()); }
T normSquared () const { return x*x+y*y+z*z; }
// boolean operators
bool operator == (const Vector3& v) const { return x==v.x && y==v.y && z==v.z; }
bool operator != (const Vector3& v) const { return x!=v.x || y!=v.y || z!=v.z; }
// operators
Vector3 operator + (const Vector3 &v) const { return Vector3(x+v.x, y+v.y, z+v.z); }
Vector3& operator += (const Vector3 &v) { x+=v.x; y+=v.y; z+=v.z; return *this; }
Vector3 operator - () const { return Vector3(-x, -y, -z); }
Vector3 operator - (const Vector3 &v) const { return Vector3(x-v.x, y-v.y, z-v.z); }
Vector3& operator -= (const Vector3 &v) { x-=v.x; y-=v.y; z-=v.z; return *this; }
Vector3 operator * (T s) const { return Vector3(x*s, y*s, z*s); }
Vector3& operator *= (float s) { x*=s; y*=s; z*=s; return *this; }
Vector3 operator / (float s) const { ASSERT(s); return (*this)* (1/s); }
Vector3& operator /= (float s) { ASSERT(s); return (*this)*=(1/s); }
// coordinates
T x, y, z;
};
template <class T> inline
T Dot (const Vector3<T>& l, const Vector3<T>& r)
{
return l.x*r.x + l.y*r.y + l.z*r.z;
}
// cross product
template <class T> inline
Vector3<T> Cross (const Vector3<T>& l, const Vector3<T>& r)
{
return Vector3<T>(
l.y*r.z - l.z*r.y,
l.z*r.x - l.x*r.z,
l.x*r.y - l.y*r.x );
}
// blend_product
template <class T> inline
T BlendProduct (const Vector3<T>& l, const Vector3<T>& m, const Vector3<T>& r)
{
return Dot(Cross(l, m), r);
}
/**
* types
**/
typedef Vector3<char> Vector3c;
typedef Vector3<int> Vector3i;
typedef Vector3<float> Vector3f;
typedef Vector3<double> Vector3d;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -