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

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

?? matrix.h

?? 游戲編程精髓數學部分代碼和原程序不錯的!不錯!
?? H
字號:
/* Copyright (C) Miguel Gomez, 2000.  * All rights reserved worldwide. * * This software is provided "as is" without express or implied * warranties. You may freely copy and compile this source into * applications you distribute provided that the copyright text * below is included in the resulting source code, for example: * "Portions Copyright (C) Miguel Gomez, 2000" */#ifndef _MATRIX_H_#define _MATRIX_H_//// A 3x3 matrix//template <class V3, class SCALAR>struct T_MATRIX3{	V3 C[3];	//column vectors	//default	T_MATRIX3()	{		//identity		C[0][0] = 1;		C[1][1] = 1;		C[2][2] = 1;	}	//initialize	T_MATRIX3( const V3& c0, const V3& c1, const V3& c2 )	{		C[0] = c0;		C[1] = c1;		C[2] = c2;	}	//M[col][row]	//indexing, read	const V3& operator [] ( long i ) const	{		return C[i];	}	//indexing, write	V3& operator [] ( long i )	{		return C[i];	}	//compare	const bool operator == ( const T_MATRIX3& m ) const	{		return C[0]==m.C[0] && C[1]==m.C[1] && C[2]==m.C[2];	}	const bool operator != ( const T_MATRIX3& m ) const	{		return !(m == *this);	}	//assign	const T_MATRIX3& operator = ( const T_MATRIX3& m )	{		C[0] = m.C[0];		C[1] = m.C[1];		C[2] = m.C[2];		return *this;	}	//increment	const T_MATRIX3& operator += ( const T_MATRIX3& m )	{		C[0] += m.C[0];		C[1] += m.C[1];		C[2] += m.C[2];		return *this;	}	//decrement	const T_MATRIX3& operator -= ( const T_MATRIX3& m ) 	{		C[0] -= m.C[0];		C[1] -= m.C[1];		C[2] -= m.C[2];		return *this;	}	//self-multiply by a scalar	const T_MATRIX3& operator *= ( const SCALAR s )	{		C[0] *= s;		C[1] *= s;		C[2] *= s;		return *this;	}	//self-multiply by a matrix	const T_MATRIX3& operator *= ( const T_MATRIX3& m )	{		//NOTE:  don't change the columns		//in the middle of the operation		T_MATRIX3 temp = (*this);		C[0] = temp * m.C[0];		C[1] = temp * m.C[1];		C[2] = temp * m.C[2];		return *this;	}	//self-divide by a scalar	const T_MATRIX3& operator /= ( const SCALAR s )	{		C[0] /= s;		C[1] /= s;		C[2] /= s;		return *this;	}	//add	const T_MATRIX3 operator + ( const T_MATRIX3& m ) const	{		return T_MATRIX3( C[0] + m.C[0], C[1] + m.C[1], C[2] + m.C[2] );	}	//subtract	const T_MATRIX3 operator - ( const T_MATRIX3& m ) const	{		return T_MATRIX3( C[0] - m.C[0], C[1] - m.C[1], C[2] - m.C[2] );	}	//divide by a scalar	const T_MATRIX3 operator / ( const SCALAR s ) const	{		return T_MATRIX3( C[0]/s, C[1]/s, C[2]/s );	}	//post-multiply by a scalar	const T_MATRIX3 operator * ( const SCALAR s ) const	{		return T_MATRIX3( C[0]*s, C[1]*s, C[2]*s );	}	//pre-multiply by a scalar	friend inline const T_MATRIX3 operator * ( const SCALAR s, const T_MATRIX3& m )	{		return m * s;	}	//post-multiply by a vector	const V3 operator * ( const V3& v ) const	{		return( C[0]*v.x + C[1]*v.y + C[2]*v.z );	}	//pre-multiply by a vector	inline friend const V3 operator * ( const V3& v, const T_MATRIX3& m )	{		return V3( m.C[0].dot(v), m.C[1].dot(v), m.C[2].dot(v) );	}	//post-multiply by a matrix	const T_MATRIX3 operator * ( const T_MATRIX3& m ) const	{		return T_MATRIX3( (*this) * m.C[0], (*this) * m.C[1], (*this) * m.C[2] );	}	//transpose	T_MATRIX3 transpose() const	{		//turn columns on their side		return T_MATRIX3(						V3( C[0].x, C[1].x, C[2].x ),	//column 0						V3( C[0].y, C[1].y, C[2].y ),	//column 1						V3( C[0].z, C[1].z, C[2].z )	//column 2						);	}	//determinant	const SCALAR determinant() const	{		return C[0].dot( C[1].cross(C[2]) );	}	//matrix inverse	const T_MATRIX3 inverse() const;};//4x4 matrix for linear transformationstemplate <class V4, class SCALAR>class T_MATRIX4{public:	V4 C[4];	//column vectorspublic:	T_MATRIX4()	{		//identity		C[0] = V4(1,0,0,0);		C[1] = V4(0,1,0,0);		C[2] = V4(0,0,1,0);		C[3] = V4(0,0,0,1);	}	T_MATRIX4(				const V4& c0,				const V4& c1,				const V4& c2,				const V4& c3				)	{		C[0] = c0;		C[1] = c1;		C[2] = c2;		C[3] = c3;	}	//M[col][row]	//index a column,	V4& operator [] ( long i )	{		return C[i];	}	//(read-only)	const V4& operator [] ( long i ) const	{		return C[i];	}	//assign	const T_MATRIX4& operator = ( const T_MATRIX4& m )	{		C[0] = m.C[0];		C[1] = m.C[1];		C[2] = m.C[2];		C[3] = m.C[3];		return *this;	}	//increment	const T_MATRIX4& operator += ( const T_MATRIX4& m )	{		C[0] += m.C[0];		C[1] += m.C[1];		C[2] += m.C[2];		C[3] += m.C[3];		return *this;	}	//decrement	const T_MATRIX4& operator -= ( const T_MATRIX4& m ) 	{		C[0] -= m.C[0];		C[1] -= m.C[1];		C[2] -= m.C[2];		C[3] -= m.C[3];		return *this;	}	//self-multiply by a scalar	const T_MATRIX4& operator *= ( const SCALAR s )	{		C[0] *= s;		C[1] *= s;		C[2] *= s;		C[3] *= s;		return *this;	}	//self-multiply by a matrix	const T_MATRIX4& operator *= ( const T_MATRIX4& m )	{		//NOTE:  don't change the columns		//in the middle of the operation		T_MATRIX4 temp = (*this);		C[0] = temp * m.C[0];		C[1] = temp * m.C[1];		C[2] = temp * m.C[2];		C[4] = temp * m.C[4];		return *this;	}	//self-divide by a scalar	const T_MATRIX4& operator /= ( const SCALAR s )	{		C[0] /= s;		C[1] /= s;		C[2] /= s;		C[3] /= s;		return *this;	}	//add	const T_MATRIX4 operator + ( const T_MATRIX4& m ) const	{		return T_MATRIX4( C[0] + m.C[0], C[1] + m.C[1], C[2] + m.C[2], C[3] + m.C[3] );	}	//subtract	const T_MATRIX4 operator - ( const T_MATRIX4& m ) const	{		return T_MATRIX4( C[0] - m.C[0], C[1] - m.C[1], C[2] - m.C[2], C[3] - m.C[3] );	}	//divide by a scalar	const T_MATRIX4 operator / ( const SCALAR s ) const	{		return T_MATRIX4( C[0]/s, C[1]/s, C[2]/s, C[3]/s );	}	//post-multiply by a scalar	const T_MATRIX4 operator * ( const SCALAR s ) const	{		return T_MATRIX4( C[0]*s, C[1]*s, C[2]*s, C[3]*s );	}	//pre-multiply by a scalar	friend inline const T_MATRIX4 operator * ( const SCALAR s, const T_MATRIX4& m )	{		return m * s;	}	//post-multiply by a vector	const V4 operator * ( const V4& v ) const	{		//sum up in columns		return( C[0]*v.x + C[1]*v.y + C[2]*v.z + C[3]*v.w );	}	//pre-multiply by a vector	inline friend const V4 operator * ( const V4& v, const T_MATRIX4& m )	{		return V4( m.C[0].dot(v), m.C[1].dot(v), m.C[2].dot(v), m.C[2].dot(v) );	}	//post-multiply by a matrix	const T_MATRIX4 operator * ( const T_MATRIX4& m ) const	{		return T_MATRIX4( (*this) * m.C[0], (*this) * m.C[1], (*this) * m.C[2], (*this) * m.C[3] );	}};// Symmetric matrices can be optimizedtemplate< class SCALAR, class V3, class T_MATRIX3 >class T_SYMMETRIC_MATRIX3{	public:		SCALAR xx, yy, zz;	//diagonal elements		SCALAR xy, xz, yz;	//off-diagonal elements	public:		T_SYMMETRIC_MATRIX3()		{			//identity			xx = yy = zz = 1;			xy = xz = yz = 0;		}		T_SYMMETRIC_MATRIX3(							const SCALAR xx,							const SCALAR yy,							const SCALAR zz,							const SCALAR xy,							const SCALAR xz,							const SCALAR yz							)		{			this->xx = xx;			this->yy = yy;			this->zz = zz;			this->xy = xy;			this->xz = xz;			this->yz = yz;		}		//set equal to another matrix		const T_SYMMETRIC_MATRIX3& operator = ( const T_SYMMETRIC_MATRIX3& m )		{			this->xx = m.xx;			this->yy = m.yy;			this->zz = m.zz;			this->xy = m.xy;			this->xz = m.xz;			this->yz = m.yz;			return *this;		}		//increment by another matrix		const T_SYMMETRIC_MATRIX3& operator += ( const T_SYMMETRIC_MATRIX3& m )		{			this->xx += m.xx;			this->yy += m.yy;			this->zz += m.zz;			this->xy += m.xy;			this->xz += m.xz;			this->yz += m.yz;			return *this;		}		//decrement by another matrix		const T_SYMMETRIC_MATRIX3& operator -=( const T_SYMMETRIC_MATRIX3& m ) 		{			this->xx -= m.xx;			this->yy -= m.yy;			this->zz -= m.zz;			this->xy -= m.xy;			this->xz -= m.xz;			this->yz -= m.yz;			return *this;		}		//add two matrices		T_SYMMETRIC_MATRIX3 operator + ( const T_SYMMETRIC_MATRIX3& m ) const		{			return T_SYMMETRIC_MATRIX3(										xx + m.xx,										yy + m.yy,										zz + m.zz,										xy + m.xy,										xz + m.xz,										yz + m.yz										);		}		//subtract two matrices		T_SYMMETRIC_MATRIX3 operator - ( const T_SYMMETRIC_MATRIX3& m ) const		{			return T_SYMMETRIC_MATRIX3(										xx - m.xx,										yy - m.yy,										zz - m.zz,										xy - m.xy,										xz - m.xz,										yz - m.yz										);		}		//post-multiply by a vector		V3 operator * ( const V3& v ) const		{			return V3(	v.x*xx + v.y*xy + v.z*xz,							v.x*xy + v.y*yy + v.z*yz,							v.z*xz + v.y*yz + v.z*zz );		}		//pre-multiply by a vector		friend inline V3 operator * ( const V3& v, const T_SYMMETRIC_MATRIX3& m )		{			return m * v;		}		//NOTE:  Can't do a self-multiply because the product of two symmetric matrices		//is not necessarily a symmetric matrix		//multiply two symmetric matrices//		T_SYMMETRIC_MATRIX3 operator * ( const T_SYMMETRIC_MATRIX3& m ) const//		{//			return T_MATRIX3();//		}		// - matrix specific - //		//a symmetric matrix is equal to its transpose		//Is there a simplified formula for the inverse of a symmetric matrix?};#endif//EOF

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品国产一区二区三区| 午夜欧美视频在线观看| 欧美日韩国产影片| 色狠狠一区二区| 91久久线看在观草草青青| 色综合中文字幕国产| 日韩一区二区中文字幕| 欧美揉bbbbb揉bbbbb| 色妞www精品视频| 一本到三区不卡视频| 在线亚洲高清视频| 欧美日韩国产123区| 欧美日韩一区二区三区视频| 欧美美女激情18p| 91精品国产综合久久精品麻豆| 在线成人av网站| 精品盗摄一区二区三区| 国产日韩视频一区二区三区| 国产精品国产精品国产专区不片| 国产精品久久久久久久蜜臀| 亚洲精品中文在线| 午夜电影久久久| 国产美女精品人人做人人爽| 99久久精品久久久久久清纯| 在线观看日韩高清av| 欧美高清精品3d| 精品免费国产一区二区三区四区| 久久久一区二区三区| 中文字幕av一区二区三区高| 亚洲久本草在线中文字幕| 天堂va蜜桃一区二区三区漫画版 | 成人福利视频在线| 一本大道久久a久久综合| 欧美巨大另类极品videosbest | 国产精品亚洲第一| 91丝袜美女网| 精品久久久久久最新网址| 国产精品九色蝌蚪自拍| 视频一区视频二区在线观看| 国产真实乱子伦精品视频| 色天使色偷偷av一区二区| 欧美乱妇一区二区三区不卡视频 | 国产成人自拍在线| 欧洲一区二区三区免费视频| 精品少妇一区二区三区日产乱码| 亚洲色图制服丝袜| 久久福利资源站| 在线观看一区二区精品视频| 国产亚洲污的网站| 天天影视色香欲综合网老头| 国产成人高清在线| 欧美一级欧美一级在线播放| 亚洲婷婷在线视频| 国产黄色91视频| 欧美成人高清电影在线| 一区av在线播放| 91农村精品一区二区在线| 26uuu国产一区二区三区| 视频一区二区三区在线| 色综合久久久久| 国产精品福利一区二区三区| 国精产品一区一区三区mba桃花| 欧美性做爰猛烈叫床潮| 亚洲欧洲精品成人久久奇米网| 国产一区在线观看视频| 日韩色在线观看| 青青草97国产精品免费观看无弹窗版| 在线观看视频欧美| 一区二区视频在线| 欧美精品久久久久久久久老牛影院 | 亚洲精品水蜜桃| 91在线精品秘密一区二区| 国产亚洲欧美色| 国产激情一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 国产成人av网站| 26uuu国产日韩综合| 激情综合色播五月| 精品国产露脸精彩对白| 人人超碰91尤物精品国产| 欧美日韩国产首页在线观看| 亚洲国产欧美在线| 欧美日韩在线观看一区二区| 亚洲二区视频在线| 欧美久久久久久久久久| 秋霞电影一区二区| 精品国精品国产| 国产成人在线免费| 国产精品女上位| 91久久免费观看| 青娱乐精品视频在线| 精品粉嫩超白一线天av| 国产另类ts人妖一区二区| 国产精品视频在线看| 一本到三区不卡视频| 日韩国产精品久久| 精品成人在线观看| www.色精品| 婷婷久久综合九色国产成人| 日韩一区二区三区免费看| 狠狠色丁香婷婷综合| 国产精品视频yy9299一区| 在线这里只有精品| 久久99精品久久久| 中文字幕一区二区三区蜜月| 欧美日韩视频在线一区二区| 精品亚洲国产成人av制服丝袜| 国产日产精品一区| 欧美中文字幕久久| 国产一区二区三区蝌蚪| 一区二区三区四区乱视频| 日韩视频免费观看高清在线视频| 成人丝袜18视频在线观看| 亚洲成人激情自拍| 国产欧美一区二区精品性色| 欧美丝袜第三区| 高清不卡一二三区| 日韩高清中文字幕一区| 国产精品黄色在线观看| 日韩三级视频在线观看| 一本到三区不卡视频| 国产美女精品在线| 婷婷久久综合九色综合伊人色| 国产欧美精品一区二区色综合| 欧美乱熟臀69xxxxxx| 91免费观看视频在线| 国产美女一区二区| 日本在线观看不卡视频| 一区二区三区国产精品| 国产人成亚洲第一网站在线播放| 欧美日韩精品系列| 97精品国产97久久久久久久久久久久| 久久福利视频一区二区| 视频精品一区二区| 亚洲人精品午夜| 中文字幕成人网| 久久先锋资源网| 日韩亚洲欧美在线| 欧美日韩精品二区第二页| 777xxx欧美| 欧美三级乱人伦电影| 在线视频综合导航| 色天天综合久久久久综合片| 大美女一区二区三区| 国产91露脸合集magnet| 九九国产精品视频| 久久99在线观看| 青青草精品视频| 青青草97国产精品免费观看无弹窗版| 亚洲制服欧美中文字幕中文字幕| 中文字幕日本不卡| 国产精品色呦呦| 中文字幕一区二区在线观看| 国产精品免费久久| 日韩美女视频一区| 亚洲欧美另类图片小说| 亚洲精品免费在线观看| 亚洲综合免费观看高清完整版| 一区二区三区在线视频免费观看| 亚洲欧美精品午睡沙发| 亚洲久草在线视频| 亚洲国产精品久久久久秋霞影院| 亚洲福利视频三区| 日韩av一级片| 国产麻豆91精品| 成人开心网精品视频| 成人av动漫网站| 欧美在线你懂得| 欧美一区二区女人| 久久九九全国免费| 亚洲欧美日韩成人高清在线一区| 一区二区三区色| 天天色天天操综合| 狠狠色2019综合网| 成人一级片网址| 欧美私模裸体表演在线观看| 欧美一区二区成人| 国产欧美久久久精品影院| 亚洲美女一区二区三区| 香蕉久久夜色精品国产使用方法| 欧美aⅴ一区二区三区视频| 黄色小说综合网站| 色综合久久88色综合天天6| 91精品国产综合久久蜜臀| 久久精品网站免费观看| 亚洲精品中文在线影院| 男男视频亚洲欧美| 99这里只有精品| 日韩久久免费av| 亚洲色图在线视频| 久久福利资源站| 欧洲精品在线观看| 国产视频不卡一区| 视频在线观看一区二区三区| 国产一区二区精品在线观看| 在线视频国内自拍亚洲视频| 26uuu国产电影一区二区| 亚洲免费av网站| 国产精一品亚洲二区在线视频| 色综合久久99|