亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xmath.h

?? 一個簡單的數學庫.但是很實用..大家可以下載過去研究一下.
?? H
?? 第 1 頁 / 共 3 頁
字號:
//////////////////////////////////////////////////////////////
//
// 作者:Blackbird
// 版本:0.01 beta
// 描述:X3D的數學引擎,提供3D圖形學的基本數學支持 
//
//////////////////////////////////////////////////////////////

//
// 常量和宏定義
//

#define PI			(3.141592654f)
#define PI2			(6.283185307f)
#define PI_DIV_2	(1.570796327f)
#define PI_DIV_4	(0.785398163f)
#define PI_INV		(0.318309886f)

// 極小值
#define EPSILON_E3	(float)(1E-3) 
#define EPSILON_E4	(float)(1E-4) 
#define EPSILON_E5	(float)(1E-5)
#define EPSILON_E6	(float)(1E-6)

#define MIN(a,b)	((a<b)?(a):(b))
#define MAX(a,b)	((a>b)?(a):(b))

#define SWAP(a,b,t) {t=a;a=b;b=t;}

// 角度和弧度之間的轉換
#define DEG_TO_RAD(ang)		((ang)*PI/180.0f)
#define RAD_TO_DEG(rad)		((rad)*180.0f/PI)

///////////////////////////////////////////////////////////

//
// 全局變量
//

// 三角函數查找表
extern float sin_table[361];
extern float cos_table[361];

////////////////////////////////////////////////////////////

//
// 常用數學函數
//

// 構建正/余弦函數值查找表
void BuildSinCosTable();

// 快速的正/余弦函數,使用線性插值法實現
float FastSin(float ang);
float FastCos(float ang);

// 快速計算平方根和平方根的倒數,基于NR
float InvSqrt (float x);
float FastSqrt(float x);

/////////////////////////////////////////////////////////////

//
// 向量
//

//
// 通用向量模板
//
template<class T, int D>
class CVector
{
//
// 數據
//
public:
	T	M[D];

//
// 構造函數
//
public:
	CVector() {}

	~CVector() {}

	CVector(const CVector &v)
	{
		*this=v;
	}
	inline CVector& operator = (const CVector &v)
	{
		memcpy(M,v.M,sizeof(T)*D);
		return *this;
	}
//
// 外部接口
//
public:
	// 返回維數
	inline int Dimension () const
	{
		return D;
	}
	// 元素置零
	inline void SetZero ()
	{
		memset(M,0,sizeof(T)*D);
	}
	// 安全的元素存取
	inline void SetVal (int i, T val)
	{
		if(i>=0 && i<D)
			M[i]=val;
	}
	inline void GetVal (int i, T &val) const
	{
		if(i>=0 && i<D)
			val=M[i];
	}
	// 快速元素存取
	inline T operator () (int i) const
	{
		return M[i];
	}
	inline T& operator () (int i)
	{
		return M[i];
	}
	//
	// 向量基本運算
	//
	// 向量加
	CVector& Add (const CVector &v)
	{
		for(int i=0; i<D; ++i)
			M[i]+=v.M[i];
		return *this;
	}
	CVector& Add (const CVector &v1, const CVector &v2)
	{
		for(int i=0; i<D; ++i)
			M[i]=v1.M[i]+v2.M[i];
		return *this;
	}
	// 向量減
	CVector& Sub (const CVector &v)
	{
		for(int i=0; i<D; ++i)
			M[i]-=v.M[i];
		return *this;
	}
	CVector& Sub (const CVector &v1, const CVector &v2)
	{
		for(int i=0; i<D; ++i)
			M[i]=v1.M[i]-v2.M[i];
		return *this;
	}
	// 向量取反
	CVector& Reverse()
	{
		for(int i=0; i<D; ++i)
			M[i]=-M[i];
		return *this;
	}
	// 標量積
	CVector& Scale (T val)
	{
		for(int i=0; i<D; ++i)
			M[i]*=val;
		return *this;
	}
	// 點積
	T Dot (const CVector &v) const
	{
		T sum=0;
		for(int i=0; i<D; ++i)
			sum+=M[i]*v.M[i];
		return sum;
	}
	// 向量長度
	inline T Length () const
	{
		return (sqrt(Length2()));
	}
	// 向量長度的平方
	T Length2 () const
	{
		T sum=0;
		for(int i=0; i<D; ++i)
			sum+=M[i]*M[i];
		return sum;
	}
	// 歸一化為單位向量
	void Normalize ()
	{
		T len=Length();
		if(len == 0)
			return;
		len=1/len;
		for(int i=0; i<D; ++i)
			M[i]*=len;
	}
};

/////////////////////////////////////////////////////////////

//
// 2D向量
//
template<class T>
class CVector<T,2>
{
//
// 數據
//
public:
	union
	{
		T	M[2];
		struct
		{
			T	x,y;
		};
	};
//
// 構造函數
//
public:
	CVector() {}

	~CVector() {}

	CVector(const CVector &v)
	{
		*this=v;
	}
	inline CVector& operator = (const CVector &v)
	{
		x=v.x;
		y=v.y;
		return *this;
	}
//
// 外部接口
//
public:
	inline void SetZero()
	{
		x=y=0;
	}
	inline void SetVal(T vx, T vy)
	{
		x=vx;
		y=vy;
	}
	// 快速元素存取
	inline T operator () (int i) const
	{
		return M[i];
	}
	inline T& operator () (int i)
	{
		return M[i];
	}
	// 向量運算
	inline CVector& operator += (const CVector &v)
	{
		return Add(v);
	}
	inline CVector& operator -= (const CVector &v)
	{
		return Sub(v);
	}
	inline CVector& operator *= (T val)
	{
		return Scale(val);
	}
	inline CVector& operator *= (const CVector &v)
	{
		return Dot(v);
	}
	inline CVector& Reverse()
	{
		x=-x;
		y=-y;
		return *this;
	}
	inline CVector& Add (const CVector &v)
	{
		x+=v.x;
		y+=v.y;
		return *this;
	}
	inline CVector& Add (const CVector &v1, const CVector &v2)
	{
		x=v1.x+v2.x;
		y=v1.y+v2.y;
		return *this;
	}
	inline CVector& Sub (const CVector &v)
	{
		x-=v.x;
		y-=v.y;
		return *this;
	}
	inline CVector& Sub (const CVector &v1, const CVector &v2)
	{
		x=v1.x-v2.x;
		y=v1.y-v2.y;
		return *this;
	}
	inline CVector& Scale (T val)
	{
		x*=val;
		y*=val;
		return *this;
	}
	inline T Dot (const CVector &v) const
	{
		return (x*v.x+y*v.y);
	}
	inline T Length() const
	{
		return (sqrt(x*x+y*y));
	}
	inline T Length2() const
	{
		return (x*x+y*y);
	}
	// this逆時針到v的夾角的余弦
	inline T CosOfAngle(const CVector &v) const
	{
		return (this->Dot(v)/(Length()*v.Length()));
	}
	void Normalize()
	{
		T len=Length();
		if(len == 0)
			return;
		len=1/len;
		x*=len;
		y*=len;
	}
};

typedef CVector<int,2> POINT2Di;
typedef CVector<int,2> VECTOR2Di;

typedef CVector<float,2> POINT2Df;
typedef CVector<float,2> VECTOR2Df;

typedef CVector<double,2> POINT2Dd;
typedef CVector<double,2> VECTOR2Dd;

//////////////////////////////////////////////////////////////////////////

//
// 3D向量
//
template<class T>
class CVector<T,3>
{
//
// 數據
//
public:
	union
	{
		T	M[3];
		struct
		{
			T	x,y,z;
		};
	};
//
// 構造函數
//
public:
	CVector() {}

	~CVector() {}

	CVector(const CVector &v)
	{
		*this=v;
	}
	inline CVector& operator = (const CVector &v)
	{
		x=v.x;
		y=v.y;
		z=v.z;
		return *this;
	}
//
// 外部接口
//
public:
	inline void SetZero()
	{
		x=y=z=0;
	}
	inline void SetVal(T vx, T vy, T vz)
	{
		x=vx;
		y=vy;
		z=vz;
	}
	// 快速元素存取
	inline T operator () (int i) const
	{
		return M[i];
	}
	inline T& operator () (int i)
	{
		return M[i];
	}
	// 向量運算
	inline CVector& operator += (const CVector &v)
	{
		return Add(v);
	}
	inline CVector& operator -= (const CVector &v)
	{
		return Sub(v);
	}
	inline CVector& operator *= (T val)
	{
		return Scale(val);
	}
	inline CVector& operator *= (const CVector &v)
	{
		return Dot(v);
	}
	inline CVector& Reverse()
	{
		x=-x;
		y=-y;
		z=-z;
		return *this;
	}
	inline CVector& Add (const CVector &v)
	{
		x+=v.x;
		y+=v.y;
		z+=v.z;
		return *this;
	}
	inline CVector& Add (const CVector &v1, const CVector &v2)
	{
		x=v1.x+v2.x;
		y=v1.y+v2.y;
		z=v1.z+v2.z;
		return *this;
	}
	inline CVector& Sub (const CVector &v)
	{
		x-=v.x;
		y-=v.y;
		z-=v.z;
		return *this;
	}
	inline CVector& Sub (const CVector &v1, const CVector &v2)
	{
		x=v1.x-v2.x;
		y=v1.y-v2.y;
		z=v1.z-v2.z;
		return *this;
	}
	inline CVector& Scale (T val)
	{
		x*=val;
		y*=val;
		z*=val;
		return *this;
	}
	inline T Dot (const CVector &v) const
	{
		return (x*v.x+y*v.y+z*v.z);
	}
	// 叉積,v1叉乘v2,結果保存在this中
	CVector& Cross (const CVector &v1, const CVector &v2)
	{
		x=v1.y*v2.z-v1.z*v2.y;
		y=v1.z*v2.x-v1.x*v2.z;
		z=v1.x*v2.y-v1.y*v2.x;
		return *this;
	}
	inline T Length() const
	{
		return (sqrt(x*x+y*y+z*z));
	}
	inline T Length2() const
	{
		return (x*x+y*y+z*z);
	}
	inline T CosOfAngle(const CVector &v) const
	{
		return (this->Dot(v)/(Length()*v.Length()));
	}
	void Normalize()
	{
		T len=Length();
		if(len == 0)
			return;
		len=1/len;
		x*=len;
		y*=len;
		z*=len;
	}
};

typedef CVector<int,3> POINT3Di;
typedef CVector<int,3> VECTOR3Di;

typedef CVector<float,3> POINT3Df;
typedef CVector<float,3> VECTOR3Df;

typedef CVector<double,3> POINT3Dd;
typedef CVector<double,3> VECTOR3Dd;

//////////////////////////////////////////////////////////////////////////

//
// 4D齊次向量
//

template<class T>
class CHomoVector4D: public CVector<T,3>
{
//
// 數據
//
public:
	T	w;
//
// 構造/析構函數
//
public:
	CHomoVector4D() {};

	~CHomoVector4D() {};

	CHomoVector4D(const CVector<T,3> &v): CVector(v), w(1)
	{}

	CHomoVector4D(const CHomoVector4D &v)
	{
		*this=v;
	}

	inline CHomoVector4D& operator = (const CVector<T,3> &v)
	{
		x=v.x;
		y=v.y;
		z=v.z;
		w=1;
		return *this;
	}

	inline CHomoVector4D& operator = (const CHomoVector4D &v)
	{
		x=v.x;
		y=v.y;
		z=v.z;
		w=v.w;
		return *this;
	}
//
// 外部接口
//
public:
	inline void SetZero()
	{
		CVector<T,3>::SetZero();
		w=1;
	}
	inline void SetVal(T vx, T vy, T vz, T vw=1)
	{
		CVector<T,3>::SetZero(vx,vy,vz);
		w=vw;
	}
	void Transform()
	{
		if(w==0 || w==1)
			return;
		w=1/w;
		x*=w;
		y*=w;
		z*=w;
		w=1;
	}
};

typedef CHomoVector4D<int> POINT4Di;
typedef CHomoVector4D<int> VECTOR4Di;

typedef CHomoVector4D<float> POINT4Df;
typedef CHomoVector4D<float> VECTOR4Df;

typedef CHomoVector4D<double> POINT4Dd;
typedef CHomoVector4D<double> VECTOR4Dd;

///////////////////////////////////////////////////////////////////////////////

//
// 向量運算符重載
// 

//
// 一元向量減法(取反)
//
template<class T>
CVector<T,2> operator - (const CVector<T,2> &v1)
{
	CVector<T,2> r=v1;
	r.Reverse();
	return r;
}

template<class T>
CVector<T,3> operator - (const CVector<T,3> &v1)
{
	CVector<T,3> r=v1;
	r.Reverse();
	return r;
}

template<class T>
CHomoVector4D<T> operator - (const CHomoVector4D<T> &v1)
{
	CHomoVector4D<T> r=v1;
	r.Reverse();
	return r;
}

//
// 二元向量加法
//
template<class T>
CVector<T,2> operator + (const CVector<T,2> &v1, const CVector<T,2> &v2)
{
	CVector<T,2> r=v1;
	r+=v2;
	return r;
}

template<class T>
CVector<T,3> operator + (const CVector<T,3> &v1, const CVector<T,3> &v2)
{
	CVector<T,3> r=v1;
	r+=v2;
	return r;
}

template<class T>
CHomoVector4D<T> operator + (const CHomoVector4D<T> &v1, const CHomoVector4D<T> &v2)
{
	CHomoVector4D<T> r=v1;
	r+=v2;
	return r;
}

//
// 二元向量減法
//
template<class T>
CVector<T,2> operator - (const CVector<T,2> &v1, const CVector<T,2> &v2)
{
	CVector<T,2> r=v1;
	r-=v2;
	return r;
}

template<class T>
CVector<T,3> operator - (const CVector<T,3> &v1, const CVector<T,3> &v2)
{
	CVector<T,3> r=v1;
	r-=v2;
	return r;
}

template<class T>
CHomoVector4D<T> operator - (const CHomoVector4D<T> &v1, const CHomoVector4D<T> &v2)
{
	CHomoVector4D<T> r=v1;
	r-=v2;
	return r;
}

//

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大白屁股肥臀xxxxxx| 国产精品美女久久福利网站| 日韩欧美第一区| 国产精品久久国产精麻豆99网站| 亚洲二区在线观看| 粉嫩aⅴ一区二区三区四区| 欧美福利一区二区| 亚洲色图欧美激情| 国产最新精品免费| 欧美午夜精品一区| 国产精品久久午夜夜伦鲁鲁| 美日韩黄色大片| 91麻豆免费在线观看| 欧美mv和日韩mv的网站| 亚洲制服丝袜av| 成人午夜私人影院| 久久色.com| 日本不卡中文字幕| 欧美三级韩国三级日本三斤| 欧美一区二区视频免费观看| 一二三四社区欧美黄| www.66久久| 中文字幕第一区二区| 国产精品一区二区久久精品爱涩| 在线播放视频一区| 午夜国产精品影院在线观看| 91久久精品一区二区三区| 国产精品欧美一区喷水| 国产成人精品在线看| 久久综合给合久久狠狠狠97色69| 偷窥少妇高潮呻吟av久久免费| 日本韩国一区二区三区视频| 亚洲视频免费看| 91视视频在线观看入口直接观看www | 精品国产污污免费网站入口| 午夜伦理一区二区| 69av一区二区三区| 日韩电影在线一区| 欧美丰满一区二区免费视频| 亚洲一区二区三区不卡国产欧美| 欧美怡红院视频| 亚洲一区二区三区美女| 欧美男男青年gay1069videost| 三级成人在线视频| 日韩精品中午字幕| 国产综合色精品一区二区三区| 久久久久久日产精品| 国产.精品.日韩.另类.中文.在线.播放| 日韩精品一区二| 国产成人日日夜夜| 国产精品美女久久久久久久| 色综合久久综合网欧美综合网 | 99re在线视频这里只有精品| 波多野结衣亚洲| 337p粉嫩大胆噜噜噜噜噜91av | 日韩成人一级大片| 日韩一区二区影院| 国产一区二区三区四区五区入口| 久久精品免视看| www.色综合.com| 亚洲制服丝袜av| 26uuu久久天堂性欧美| av在线不卡网| 亚洲va国产va欧美va观看| 69av一区二区三区| 国产精品18久久久久久久久久久久 | 成人av网站免费| 亚洲综合久久av| 欧美白人最猛性xxxxx69交| 激情图区综合网| 亚洲综合999| 成人精品国产免费网站| 亚洲乱码中文字幕| 精品蜜桃在线看| 91久久精品网| 激情综合色丁香一区二区| 国产精品国产自产拍高清av王其| 蜜臀99久久精品久久久久久软件| 日韩女同互慰一区二区| 99精品久久99久久久久| 日本中文字幕一区二区视频| 国产精品丝袜一区| 在线电影欧美成精品| av在线不卡观看免费观看| 日本成人中文字幕| 一二三四区精品视频| 久久亚区不卡日本| 欧美精品在线视频| 99精品黄色片免费大全| 久久69国产一区二区蜜臀| 亚洲欧美日韩电影| 国产亚洲一二三区| 欧美肥胖老妇做爰| 在线区一区二视频| 懂色中文一区二区在线播放| 日韩综合在线视频| 亚洲国产视频在线| 中文字幕中文字幕在线一区 | 中文字幕av资源一区| 日韩三级伦理片妻子的秘密按摩| 欧洲日韩一区二区三区| 成人免费视频app| 狠狠色狠狠色综合日日91app| 视频精品一区二区| 午夜精品一区二区三区免费视频| 亚洲精品高清在线| 最新高清无码专区| 中文字幕一区二区日韩精品绯色 | 欧美一级久久久| 欧美福利视频一区| 欧美日韩国产首页| 欧美性极品少妇| 欧美日韩一区二区三区高清| 欧美性感一类影片在线播放| 91网页版在线| 一本到不卡精品视频在线观看 | 亚洲女同ⅹxx女同tv| 中文字幕亚洲一区二区av在线| 国产女人18水真多18精品一级做 | 91.麻豆视频| 91麻豆精品国产91久久久更新时间| 91福利在线导航| 欧美人与性动xxxx| 欧美电影免费观看高清完整版在| 欧美mv和日韩mv的网站| 久久综合精品国产一区二区三区 | 亚洲国产人成综合网站| 亚洲一区二区不卡免费| 午夜精品一区在线观看| 麻豆精品一区二区综合av| 九色综合狠狠综合久久| 国产精品一卡二卡| 色综合中文综合网| 国产午夜精品福利| 综合在线观看色| 亚洲观看高清完整版在线观看 | 欧美不卡一区二区三区四区| 久久精品日产第一区二区三区高清版| 国产欧美一区二区三区在线老狼| 亚洲欧洲成人精品av97| 亚洲一二三四久久| 美女在线一区二区| 成人亚洲精品久久久久软件| 91福利资源站| 欧美va日韩va| 国产精品久久久久9999吃药| 亚洲电影你懂得| 中文字幕一区二区三区视频| 欧美影院一区二区三区| 高清国产一区二区三区| 99re6这里只有精品视频在线观看| 欧美精品三级日韩久久| 26uuu国产一区二区三区| 欧美激情一区二区三区四区| 亚洲福利视频三区| 国产成人亚洲综合a∨猫咪| 日本乱人伦一区| 久久久久综合网| 亚洲一区二区四区蜜桃| 国产jizzjizz一区二区| 欧美精品在线观看播放| 欧美激情一区二区三区全黄 | 亚洲国产日韩一级| 国产成人综合在线| 欧美日韩三级视频| 国产精品久久三| 久久国产人妖系列| 欧洲视频一区二区| 国产精品女同互慰在线看| 蜜臀av性久久久久蜜臀av麻豆| 99久久精品免费看| 久久综合中文字幕| 日韩在线观看一区二区| 91欧美一区二区| 欧美精品一区二区三区四区 | 黄色资源网久久资源365| 在线免费观看日本一区| 欧美国产欧美综合| 国内精品伊人久久久久av影院| 欧美日韩中字一区| 亚洲人亚洲人成电影网站色| 国产不卡视频一区| 欧美日韩国产a| 一区二区三区欧美日韩| 懂色av一区二区三区免费看| 精品国产一区二区三区久久久蜜月 | 青青草原综合久久大伊人精品优势| 国产69精品久久777的优势| 精品国产一区二区三区忘忧草| 亚洲一二三区在线观看| 欧美午夜精品电影| 亚洲最新视频在线观看| 色综合久久中文综合久久牛| 国产精品美女久久久久久久久久久| 国产成人免费高清| 日本一二三不卡| 成人18视频日本| 亚洲素人一区二区| 色噜噜夜夜夜综合网| 一区二区日韩av|