⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geometry.h

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
	Geometry Class Library
					Ver1.00 Release 000
					Wild Anarchy YU-kA (kouiti@lt.sakura.ne.jp)


埲壓偺僋儔僗偐傜峔惉偝傟傞丅
	峴楍墘嶼(Matrix)
	係尦悢墘嶼(Quaternion)
	儀僋僩儖墘嶼(Vector)

偙傟傜偺僋儔僗偼丄僎乕儉偱巊梡偡傞偙偲傪栚揑偵愝寁偟偰偄傞偨傔丄
傎偲傫偳偺娭悢偼揥奐偝傟偰偄傞丅
偨偲偊偽丄+= 墘嶼巕偼捠忢 = 偲 + 傪慻傒崌傢偣偰惗惉偡傞偑丄
偙傟傜偺僋儔僗偱偼嬌椡揥奐偟崅懍壔偟偰偄傞丅乮摿偵椙偔巊偆偲巚傢傟傞晹暘摍乯
僜乕僗僐乕僪偑旍戝壔偟偰墭偄偑懍搙傪壱偖偨傔偱偁傞丅
乮偦傟偱傕傑偩傑偩崅懍壔偺梋抧偼巆偭偰偄傞偲偼巚偆乯

偙傟傜偺僋儔僗偼丄屳偄偵墘嶼偡傞偙偲偑弌棃傞丅

	峴楍摨巑偺寁嶼
		Matrix = Matrix * Matrix
		Matrix *= Matrix

	峴楍偵傛傞嵗昗曄姺
		Vector = Vector * Matrix

	係尦悢摨巑偺寁嶼
		Quaternion = Quaternion * Quaternion
		Quaternion *= Quaternion
		Quaternion = Quaternion + Quaternion
		Quaternion += Quaternion
		~Quaternion		(Quaternion^-1 , Quaternion偺媡悢)
	偨偩偟丄係尦悢摨巑偺忔嶼偼丄峴楍偺忔嶼偺媡偵側傞揰偵拲堄丅
	偮傑傝丄
		(m1 == q1)
		(m2 == q2)
	偺帪丄
		m = m1 * m2;
		q = q2 * q1;
	偲偟偨帪偵
		(m == q)
	偲側傞丅


	係尦悢偵傛傞嵗昗曄姺(夞揮)
		Quaternion = Quaternion * VectorQuaternion * Quaternion^-1
		Vector = Quaternion * Vector * Quaternion^-1

偙傟傜偺墘嶼傪墘嶼巕乮傑偨偼娭悢乯偱峴偊傞丅


峴楍偼丄m1 , m2 偺弴偵嵗昗曄姺偟偨偄応崌丄m1 * m2 偲偡傞偑丄
係尦悢偼丄q1 , q2 偺弴偵嵗昗曄姺偟偨偄応崌 q2 * q1 偲媡偵側傞揰偵拲堄丅
乮偙傟偼僶僌偱偼側偔丄係尦悢偺摿惈偺傛偆偩乯

Geometry.h 傪屇傇慜偵丄d3dtypes.h 傪屇傇偲Vector僋儔僗傪
LPD3DVECTOR偺偐傢傝偵搉偣傞丅
摨條偵LPD3DMATRIX偵偼Matrix僋儔僗傪搉偡偙偲偑弌棃傞丅
傑偨丄D3DRMMATRIX4D(double [4][4])偵懳偟偰偼丄Matrix::m傪
捈愙搉偣偽椙偄丅


埲壓偺娭悢(operator=)偼丄Nick Bobic巵偺傾儖僑儕僘儉傪巊梡丅
	峴楍偐傜係尦悢傊曄姺
		Quaternion&	operator=(Matrix &src);


嶲峫暥專
	乽俠尵岅偵傛傞嵟怴傾儖僑儕僘儉帠揟乿墱懞 惏旻 挊乮媄弍昡榑幮乯
		偙偺庤偺傾儖僑儕僘儉杮偺拞偱偼嵟桪椙杮偱偁傞丄偲巚偆丅
		幚梡揑側傾儖僑儕僘儉偑懡悢宖嵹偝傟偰偄傞丅
		偨偩偟丄撉傒庤偵偦傟側傝偺抦幆偑梫媮偝傟傞丅
		C/C++僾儘僌儔儅側傜丄俲仌俼偲堦弿偵侾嶜帩偭偰偄偰懝偼柍偄丅
		乮傓偟傠巹偼俲仌俼傛傝偼丄偙偭偪偺曽偑廳梫偩偲妋怣偟偰偄傞乯

	乽挻暋慺悢擖栧乿処丏凩丏凨刾剘剟剙剛丄凘丏凴丏凴剙剕剙則剙剅剘剏剓剙剅挊
					愺栰 梞 娔栿丒妢尨 媣峅 栿乮怷杒弌斉姅幃夛幮乯
		係尦悢偵娫偡傞抦幆偑奆柍偩偭偨巹偑撉傫偱棟夝偱偒傞偔傜偄傢偐傝傗偡偄
		夝愢偑偝傟偰偄傞丅
		係尦悢偺夝愢偝傟偰偄傞偨偭偨俀侾儁乕僕偟偐撉傫偱側偄偑丄
		俀俇侽侽墌偼椙偄攦偄暔偩偭偨丅
		乮侾儁乕僕傕巊偄暔偵側傜側偄杮傕懡悢懚嵼偡傞乯


揮嵹丄夵曄嵞攝晍偵偮偄偰
	GPL弨嫆偱偛巊梡捀偗傟偽丄栤戣柍偄偱偡丅
	傑偨丄傾僙儞僽儔摍偱嵟揔壔偝傟偨曽偑偄傜偭偟傖偄傑偟偨傜丄
	巹偵傕偔偩偝偄丅乮徫
	弌棃傟偽丄E-3DNow婓朷偱偡丅 亙偁偮偐傑偟偄


棜楌
00/05/29	Matrix::SetOrientation()偵僶僌丅廋惓丅 > Ver1.00兝01
00/05/30	Matrix 偵 =Quaternion捛壛 > Ver1.00兝02
00/06/23	嵶晹傪廋惓
			Matrix偐傜堏摦儀僋僩儖傪Vector偵僐僺乕丄壛尭嶼偡傞operator捛壛丅
			SetOrientation()偺Vector偺堷悢傪億僀儞僞偐傜傾僪儗僗墘嶼巕偵曄峏丅
			摨偠偔SetRotate()偺Vector偺堷悢傕廋惓丅
			Matrix::Invert()傪捛壛丅乮媡峴楍傪媮傔傞乯
00/06/24	Quaternion&	operator=(Matrix &src);偵僶僌偑偁偭偨偨傔廋惓
			Quaternion::SetOrientation(),Matrix::SetOrientation()偺僶僌廋惓丅
			Matrix::Invert()偑摿掕忦審壓偱摦嶌偟側偐偭偨偨傔廋惓丅
00/06/25	Matrix::SetMagnification()捛壛
00/06/27	Quaternion * Matrix , Matrix * Quaternion 偺幃偑桳岠偵側偭偨丅
00/06/27	Quaternion::Quaternion&	operator= (Vector &src) 傪嶍彍丅
			棟桼偼Matrix偺応崌偲摦嶌偑堎側偭偰偟傑偆偨傔丅
00/07/03	Vector僋儔僗偵撪愊丄奜愊偺墘嶼娭悢傪捛壛丅
00/07/05	嵶晹傪廋惓

*/

#ifndef __GEOMETRY_H__
#define __GEOMETRY_H__

//#include <float.h>

#ifndef PI
#define M_PI		3.14159265358979323846
#define M_PI_2		1.57079632679489661923
#define PI			M_PI
#define PI2			M_PI_2
#endif

//#define float double

// 0偵嬤偄抣傪0偵娵傔傞丅
#define DBL_EPSILON 2.2204460492503131E-16
#define NearZero(d)	((d<DBL_EPSILON && d>-DBL_EPSILON) ? 0 : d)
#define IsZero(d)	((d<DBL_EPSILON && d>-DBL_EPSILON) ? 1 : 0)

class Vector;
class Quaternion;

class Matrix
{
public:
					Matrix();
	virtual			~Matrix();

	float			m[4][4];

	void			put();

// X,Y,Z丄偦傟偧傟偺幉偵懳偟偰丄r偩偗夞揮偡傞峴楍傪惗惉
	void			SetXrotate(float r);
	void			SetYrotate(float r);
	void			SetZrotate(float r);
// X,Y,Z丄偦傟偧傟偺幉偵懳偟偰丄r偩偗夞揮偡傞峴楍傪惗惉
	void			SetXrotate(float s,float c);
	void			SetYrotate(float s,float c);
	void			SetZrotate(float s,float c);
// 'F'偼first,fast偺堄丅this偑弶婜壔偝傟偰
// 偄傞応崌乮僐儞僗僩儔僋僩捈屻摍乯偺傒桳岠
// 乮嵟弶偩偗(first)巊梡偱偒丄崅懍(fast)乯
	void			SetXrotateF(float r);
	void			SetYrotateF(float r);
	void			SetZrotateF(float r);

// 奼戝弅彫偡傞峴楍惗惉
	void			SetMagnification(float src);
	void			SetMagnification(float x,float y,float z);
	void			SetMagnification(Vector &src);

// z儀僋僩儖惉暘偑(x,y,z)傪岦偒丄y儀僋僩儖惉暘偑(ix,iy,iz)傪岦偔曄姺傪峴偆峴楍傪惗惉
	void			SetOrientation(float x,float y,float z,float ix,float iy,float iz);
	void			SetOrientation(Vector &vz,Vector &vy);

	Matrix&			Invert();
// 堏摦儀僋僩儖僙僢僩
	void			SetVector(float x=0,float y=0,float z=0);

	float&			operator()(int y, int x) { return m[y][x]; };
	Matrix&			operator= (Matrix src);
// 係尦悢偐傜峴楍傊曄姺
	Matrix&			operator= (Quaternion &src);
// 堏摦嵗昗傪戙擖丄壛尭嶼(m[3][0],m[3][1],m[3][2]偩偗傪彂偒姺偊)
	Matrix&			operator= (Vector &src);
	Matrix&			operator+=(Vector &src);
	Matrix&			operator-=(Vector &src);
// 峴楍偺忔嶼
	Matrix&			operator*=(Matrix &src);
	Matrix			operator* (Matrix &src);
// 峴楍 * 係尦悢
	Matrix			operator* (Quaternion &src);
	Matrix&			operator*=(Quaternion &src);

// (x,y,z)傪堦棩src攞偡傞峴楍偵偡傞
	Matrix&			operator*=(float src);
	Matrix			operator* (float src);
// 奺曽岦傪src攞偡傞峴楍偵偡傞
	Matrix&			operator*=(Vector &src);
	Matrix			operator* (Vector &src);
// 媡峴楍
	Matrix			operator~();

#ifdef _D3DTYPES_H_
	operator D3DMATRIX*() {return (D3DMATRIX*)m;};
#endif
};

class Quaternion
{
public:
					Quaternion();
	virtual			~Quaternion();

// q = a + bi + cj + dk (b,c,d偼偦傟偧傟x,y,z偵懳墳偡傞)
	float			a,b,c,d;

// 抣傪戙擖
	Quaternion&		set(float ina,float inb,float inc,float ind);
// a 偼 0 偵側傞丅
	Quaternion&		set(float inb,float inc,float ind);
// 僨僶僢僌梡
	void			put();
// 係尦悢偺媡悢
	Quaternion&		Invert();

	void			SetXrotate(float r);
	void			SetYrotate(float r);
	void			SetZrotate(float r);

	Quaternion&		operator= (Quaternion src);
// 峴楍偐傜係尦悢傊曄姺
	Quaternion&		operator= (Matrix &src);
// 儀僋僩儖偺僐僺乕丅幚悢晹偼 0 偱弶婜壔偝傟傞
//	Quaternion&		operator= (Vector &src);
// 係尦悢偺壛嶼
	Quaternion		operator+ (Quaternion &src);
	Quaternion&		operator+=(Quaternion &src);
// 係尦悢偺忔嶼
	Quaternion		operator* (Quaternion &src);
	Quaternion&		operator*=(Quaternion &src);
// 係尦悢 * 峴楍

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -