//
// vector3.h
// hello
///*注釋:
--是否需要const修飾就是分析其資料是否需要修改,不需要修改就加const,安全性
--一般有兩個地方需要考慮是否加const:1,成員函式引數處 2,成員函式本身,即類本身資料不允許修改(修飾的是this)
*/#ifndef hello_vector3_h
#define hello_vector3_h
#include
class vector3
vector3(const vector3 &a) : x(a.x), y(a.y), z(a.z) {}
vector3(float nx, float ny, float nz) : x(nx), y(ny), z(nz) {}
//過載 '='
vector3 &operator =(const vector3 &a)
//過載 '=='
bool
operator ==(const vector3 &a) const
//過載 '!='
bool
operator !=(const vector3 &a) const
//置為零向量
void zero()
//過載一元 '-' (即負號)
vector3 operator -() const
//過載二元 '+' '-'(即加,減)
vector3 operator +(const vector3 &a) const
vector3 operator -(const vector3 &a) const
//與標量的乘,除法
vector3 operator *(float a) const
vector3 operator /(float a) const
//過載自反運算子
vector3 operator +=(const vector3 &a)
vector3 operator -=(const vector3 &a)
vector3 operator *=(float a)
vector3 operator /=(float a)
//向量標準化
void normalize()
}//向量點乘
float
operator *(const vector3 &a) const
};///
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
////////
////非成員函式:有些函式寫類外面更易懂
/////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
////////
/*加inline 可以防止函式重定義,因為內聯直接在呼叫處展開,不會編譯成全域性的函式呼叫*/
//求向量的模
inline float vectormag(const vector3 &a)
//計算向量的叉乘
inline vector3 crossproduct(const vector3 &a, const vector3 &b)
//實現標量左乘
inline vector3 operator *(float k, const vector3 &v)
//計算兩點間的距離
inline float distance(const vector3 &a, const vector3 &b)
//提供乙個全域性零向量
extern
const vector3 kzerovector;
#endif
3D數學基礎
vector是向量,向量的意思,向量既有大小,又有方向,verctor3 就是三維向量,乙個三維向量會有三個分量,分別是 x,y,z,在 unity 中每乙個遊戲物件都至少會有乙個元件叫 transform,transform 主要用來控制遊戲物件的位置,旋轉和縮放。vector3.distance...
3D遊戲引擎數學基礎3 向量(下篇)
向量數乘 標量可以與向量相乘,可以直觀聯想到,該運算可以對向量進行縮放。該運算不改變向量的方向,除非標量是負數,這樣向量的方向與原來的方向相反。k u k ux,k uy,k uz 在unity引擎中有對物體進行縮放的功能,其提供在三個座標軸上的縮放,其底層的運算估計就是向量數乘。於是,有需要過載一...
3d數學基礎 常用向量相關運算
作為半路出家的unity程式,必須要補一補3d數學相關的基礎。在遊戲中,運用的比較多的就是三維向量了。三維向量中,比較常見的操作有 1.求兩點距離 這個比較簡單,直接使用目標點各個座標分量相減,然後利用勾股定理求取長度即可。math.sqrt x x y y z z 2.求兩向量夾角 求向量夾角,則...