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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? xmath.h

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

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

#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;}

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

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

//
// 全局變量
//

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

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

//
// 常用數(shù)學函數(shù)
//

// 構(gòu)建正/余弦函數(shù)值查找表
void BuildSinCosTable();

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

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

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

//
// 向量
//

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

//
// 構(gòu)造函數(shù)
//
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:
	// 返回維數(shù)
	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>
{
//
// 數(shù)據(jù)
//
public:
	union
	{
		T	M[2];
		struct
		{
			T	x,y;
		};
	};
//
// 構(gòu)造函數(shù)
//
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>
{
//
// 數(shù)據(jù)
//
public:
	union
	{
		T	M[3];
		struct
		{
			T	x,y,z;
		};
	};
//
// 構(gòu)造函數(shù)
//
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,結(jié)果保存在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>
{
//
// 數(shù)據(jù)
//
public:
	T	w;
//
// 構(gòu)造/析構(gòu)函數(shù)
//
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一区二区三区免费野_久草精品视频
精品日产卡一卡二卡麻豆| 亚洲欧洲综合另类在线| 日韩午夜在线播放| 欧美视频在线观看一区二区| 欧美色视频在线| 欧美制服丝袜第一页| 欧美三级视频在线播放| 欧美色爱综合网| 欧美三级在线播放| 亚洲激情图片一区| 亚洲另类在线制服丝袜| 欧美一区二区三区视频| 欧美精品三级日韩久久| 欧美日韩黄色一区二区| 一本高清dvd不卡在线观看| av激情亚洲男人天堂| 91丨国产丨九色丨pron| 色哟哟国产精品| 欧美亚洲国产bt| 欧美日韩一区二区欧美激情| 欧美区一区二区三区| 欧美一区二视频| 久久网这里都是精品| 日本一区二区综合亚洲| 国产清纯白嫩初高生在线观看91 | 成人涩涩免费视频| av欧美精品.com| 欧美日韩一区二区三区四区| 91精品国产乱码| 久久久久久亚洲综合| 国产精品久久久久精k8 | 91在线观看污| 欧美日韩中文字幕一区| 日韩欧美一级二级| 久久精品在线观看| 亚洲人成影院在线观看| 日韩专区中文字幕一区二区| 国产一区欧美一区| 91亚洲男人天堂| 欧美精品久久天天躁| 久久久久久一级片| 亚洲欧美另类久久久精品| 日韩精品高清不卡| 国产黄色成人av| 欧美色网站导航| 2014亚洲片线观看视频免费| 国产精品对白交换视频| 日精品一区二区三区| 成人免费三级在线| 欧美日韩dvd在线观看| 精品国产污网站| 亚洲欧美视频在线观看视频| 日产欧产美韩系列久久99| 国产黄色精品视频| 欧美日韩高清一区二区三区| 国产午夜精品一区二区| 亚洲第一二三四区| 成人视屏免费看| 日韩女优制服丝袜电影| 亚洲激情五月婷婷| 国产一区二区三区av电影| 在线看一区二区| 中文在线资源观看网站视频免费不卡| 丝袜诱惑亚洲看片| av综合在线播放| 精品国一区二区三区| 亚洲一区二区在线免费观看视频 | 久久综合久久久久88| 夜夜夜精品看看| 国产成人aaa| 精品少妇一区二区三区在线视频 | 国产乱淫av一区二区三区| 欧美又粗又大又爽| 欧美国产精品一区| 久久国产欧美日韩精品| 欧洲一区二区三区免费视频| 中文字幕久久午夜不卡| 国产一区福利在线| 日韩一区二区在线看片| 亚洲成人免费av| 色狠狠一区二区| 亚洲天堂免费看| 国产成a人亚洲精品| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 91精品国产综合久久久久久漫画 | 亚洲综合丁香婷婷六月香| 国产精品一区二区在线观看网站| 欧美精品在线观看播放| 亚洲美女屁股眼交3| 成人福利视频网站| 国产欧美日韩另类一区| 国内精品久久久久影院薰衣草| 在线不卡的av| 天天影视网天天综合色在线播放| 91美女精品福利| 亚洲欧洲色图综合| 99久久精品免费看| 国产精品人妖ts系列视频| 国产毛片一区二区| 精品国产91久久久久久久妲己 | 美国三级日本三级久久99| 欧美日韩三级视频| 五月激情六月综合| 在线电影一区二区三区| 日日摸夜夜添夜夜添精品视频 | 国产精品系列在线| 国产精品原创巨作av| 久久久三级国产网站| 国产河南妇女毛片精品久久久| 精品国产1区二区| 国产毛片精品一区| 久久精品亚洲精品国产欧美kt∨| 国产精品一级片在线观看| 久久久国产综合精品女国产盗摄| 国产精品白丝av| 欧美国产日韩亚洲一区| 99热在这里有精品免费| 亚洲人成影院在线观看| 欧美在线观看视频一区二区 | 国产在线精品一区在线观看麻豆| 2023国产精品自拍| 国产成人日日夜夜| 国产精品国产三级国产普通话蜜臀 | 日韩欧美国产综合| 国内外精品视频| 欧美国产在线观看| 一本一道久久a久久精品综合蜜臀| 一区二区在线观看av| 欧美日韩一区二区三区视频| 日本亚洲最大的色成网站www| 日韩一级大片在线| 国产sm精品调教视频网站| 亚洲色图.com| 8x8x8国产精品| 韩国女主播一区| 亚洲欧美一区二区三区国产精品 | 欧美成人一区二区三区片免费| 黄网站免费久久| 国产精品色婷婷久久58| 日本韩国精品一区二区在线观看| 日韩专区在线视频| 亚洲精品一区二区三区四区高清 | 精品av久久707| 成人av电影在线网| 一区二区三区**美女毛片| 欧美成人vps| 91小视频免费观看| 全国精品久久少妇| 久久久久成人黄色影片| 91成人国产精品| 精品一区二区久久久| 亚洲色大成网站www久久九九| 4438亚洲最大| 国产999精品久久久久久| 亚洲一区二区视频在线| 久久婷婷综合激情| 色欧美乱欧美15图片| 日韩电影在线观看网站| 中文字幕av一区二区三区免费看 | 欧美日韩成人综合天天影院 | 久久亚洲精品小早川怜子| a4yy欧美一区二区三区| 日本一不卡视频| 亚洲欧美视频在线观看视频| 精品久久久久一区| 在线精品视频一区二区| 国产精品99久久久久久久女警 | 在线视频欧美精品| 国产一区二区三区不卡在线观看| 亚洲成人自拍网| 国产嫩草影院久久久久| 欧美一区二区三区影视| 97精品超碰一区二区三区| 久久成人免费网| 亚洲午夜成aⅴ人片| 国产日产欧美一区二区三区| 欧美一区二区三区视频免费播放| 色诱视频网站一区| 国产不卡一区视频| 经典三级视频一区| 午夜久久久影院| 亚洲欧美电影院| 欧美国产日韩一二三区| 久久午夜羞羞影院免费观看| 欧美情侣在线播放| 欧美性大战久久久久久久蜜臀| 成人性生交大片免费看中文| 久久电影国产免费久久电影| 三级精品在线观看| 一区2区3区在线看| **网站欧美大片在线观看| 久久色在线观看| 精品欧美黑人一区二区三区| 666欧美在线视频| 欧美亚洲尤物久久| 色香蕉久久蜜桃| 91麻豆国产福利精品| 国产高清久久久久| 国产一区二区三区免费看| 蜜桃久久久久久久|