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

📄 mtxlib.h

📁 这是一个用OPENGL和VC++作的人工智能程序,大家可以借鉴一下
💻 H
字号:
/* Copyright (C) Dante Treglia II and Mark A. DeLoura, 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) Dante Treglia II and Mark A. DeLoura, 2000" *///==========================================================// C++ Matrix Library// Version: 2.5// Date: April 22, 2000// Authors: Dante Treglia II and Mark A. DeLoura// Thanks to: Miguel Gomez, Stan Melax, Pete Isensee, //   Gabor Nagy, Scott Bilas, James Boer, Eric Lengyel//==========================================================#ifndef _MTXLIB_H#define _MTXLIB_H#include "stdio.h"static inline float DegToRad(float a) { return a*0.01745329252f; };static inline float RadToDeg(float a) { return a*57.29577951f; };class vector2;class vector3;class vector4;class matrix33;class matrix44;////////////////////////////////////////////////////////////// vector2 class//class vector2 { public:  // Members  float x, y;   public:  // Constructors  // vector2(): x(0), y(0) {};  vector2() {};  vector2(float inX, float inY);  vector2(const vector2 &v);   public:  // Operators  float                 &operator [] (unsigned int index);  const float           &operator [] (unsigned int index) const;  vector2               &operator =  (const vector2 &v);  vector2               &operator += (const vector2 &v);  vector2               &operator -= (const vector2 &v);  vector2               &operator *= (float f);  vector2               &operator /= (float f);  friend bool           operator == (const vector2 &a, const vector2 &b);  friend bool           operator != (const vector2 &a, const vector2 &b);  friend vector2        operator - (const vector2 &a);  friend vector2        operator + (const vector2 &a, const vector2 &b);  friend vector2        operator - (const vector2 &a, const vector2 &b);  friend vector2        operator * (const vector2 &v, float f);  friend vector2        operator * (float f, const vector2 &v);  friend vector2        operator / (const vector2 &v, float f);    //operator float*() {return &x;}; public:  // Methods  void                  set(float xIn, float yIn);  float                 length() const;  float                 lengthSqr() const;  bool                  isZero() const;  vector2               &normalize();    // Debug  void                  fprint(FILE* file, char* str) const;};////////////////////////////////////////////////////////////// vector3 class//class vector3 { public:  // Members  float x, y, z; public:  // Constructors  // vector3(): x(0), y(0), z(0) {};  vector3() {};  vector3(float inX, float inY, float inZ);  vector3(const vector3 &v);  explicit vector3(const vector2 &v);  explicit vector3(const vector4 &v);   public:  // Operators  float                 &operator [] (unsigned int index);  const float           &operator [] (unsigned int index) const;  vector3               &operator =  (const vector3 &v);  vector3               &operator =  (const vector2 &v);  vector3               &operator += (const vector3 &v);  vector3               &operator -= (const vector3 &v);  vector3               &operator *= (float f);  vector3               &operator /= (float f);  friend bool           operator == (const vector3 &a, const vector3 &b);  friend bool           operator != (const vector3 &a, const vector3 &b);  friend vector3        operator - (const vector3 &a);  friend vector3        operator + (const vector3 &a, const vector3 &b);  friend vector3        operator - (const vector3 &a, const vector3 &b);  friend vector3        operator * (const vector3 &v, float f);  friend vector3        operator * (float f, const vector3 &v);  friend vector3        operator / (const vector3 &v, float f);  //operator float*() {return &x;}; public:  // Methods  void                  set(float xIn, float yIn, float zIn);  float                 length() const;  float                 lengthSqr() const;  bool                  isZero() const;  vector3               &normalize();    // Debug  void                  fprint(FILE* file, char* str) const;};////////////////////////////////////////////////////////////// vector4 class//class vector4 { public:  // Members  float x, y, z, w;   public:  // Constructors  // vector4(): x(0), y(0), z(0), w(0) {};  vector4() {};  vector4(float inX, float inY, float inZ, float inW);  vector4(const vector4 &v);  explicit vector4(const vector3 &v);  explicit vector4(const vector2 &v);   public:  // Operators  float                 &operator [] (unsigned int index);  const float           &operator [] (unsigned int index) const;  vector4               &operator =  (const vector4 &v);  vector4               &operator =  (const vector3 &v);  vector4               &operator =  (const vector2 &v);  vector4               &operator += (const vector4 &v);  vector4               &operator -= (const vector4 &v);  vector4               &operator *= (float f);  vector4               &operator /= (float f);  friend bool           operator == (const vector4 &a, const vector4 &b);  friend bool           operator != (const vector4 &a, const vector4 &b);  friend vector4        operator - (const vector4 &a);  friend vector4        operator + (const vector4 &a, const vector4 &b);  friend vector4        operator - (const vector4 &a, const vector4 &b);  friend vector4        operator * (const vector4 &v, float f);  friend vector4        operator * (float f, const vector4 &v);  friend vector4        operator / (const vector4 &v, float f);  //operator float*() {return &x;}; public:  // Methods  void                  set(float xIn, float yIn, float zIn, float wIn);  float                 length() const;  float                 lengthSqr() const;  bool                  isZero() const;  vector4               &normalize();    // Debug  void                  fprint(FILE* file, char* str) const;};////////////////////////////////////////////////////////////// Miscellaneous vector functions//vector2 Normalized(const vector2 &a);vector3 Normalized(const vector3 &a);vector4 Normalized(const vector4 &a);float DotProduct(const vector2 &a, const vector2 &b);float DotProduct(const vector3 &a, const vector3 &b);float DotProduct(const vector4 &a, const vector4 &b);void SwapVec(vector2 &a, vector2 &b);void SwapVec(vector3 &a, vector3 &b);void SwapVec(vector4 &a, vector4 &b);vector3 CrossProduct(const vector3 &a, const vector3 &b);bool NearlyEquals(const vector2 &a, const vector2 &b, float r);bool NearlyEquals(const vector3 &a, const vector3 &b, float r);bool NearlyEquals(const vector4 &a, const vector4 &b, float r);////////////////////////////////////////////////////////////// matrix33 class//class matrix33 { public:  // Members  vector3       col[3];   public:  // Constructors  matrix33() {};  matrix33(float v);  matrix33(const matrix33 &m);  matrix33(const vector3 &v0, const vector3 &v1, const vector3 &v2);   public:  // Operators  vector3		&operator [] (unsigned int i);  const vector3		&operator [] (unsigned int i) const;  matrix33		&operator =  (const matrix33 &m);  matrix33		&operator += (const matrix33 &m);  matrix33		&operator -= (const matrix33 &m);  matrix33		&operator *= (const matrix33 &m);  matrix33		&operator *= (float f);  matrix33		&operator /= (float f);  friend bool		operator == (const matrix33 &a, const matrix33 &b);  friend bool		operator != (const matrix33 &a, const matrix33 &b);  friend matrix33	operator + (const matrix33 &a, const matrix33 &b);  friend matrix33	operator - (const matrix33 &a, const matrix33 &b);  friend matrix33	operator * (const matrix33 &a, const matrix33 &b);  friend vector3 	operator * (const matrix33 &m, const vector3 &v);  friend vector3 	operator * (const vector3 &v, const matrix33 &m);  friend matrix33	operator * (const matrix33 &m, float f);  friend matrix33	operator * (float f, const matrix33 &m);  friend matrix33	operator / (const matrix33 &m, float f);    //operator float*() {return (float*)col[0]; }; public:  // Methods  matrix33		&identity();  matrix33		&transpose();  matrix33		&invert();  // Debug  void			fprint(FILE* file, char* str) const;};matrix33	IdentityMatrix33();matrix33	TransposeMatrix33(const matrix33 &m);matrix33	InvertMatrix33(const matrix33 &m);matrix33	RotateRadMatrix33(float rad);matrix33	TranslateMatrix33(float x, float y);matrix33	ScaleMatrix33(float x, float y, float z = 1.0);////////////////////////////////////////////////////////////// matrix44 class//class matrix44 { public:  // Members  vector4	col[4]; public:  // Constructors  matrix44() {};  matrix44(float v);  matrix44(const matrix44 &m);  matrix44(const vector4 &v0, const vector4 &v1, 	   const vector4 &v2, const vector4 &v3);  explicit matrix44(const matrix33 &m); public:  // Operators  vector4		&operator [] (unsigned int i);  const vector4		&operator [] (unsigned int i) const;  matrix44		&operator =  (const matrix44 &m);  matrix44		&operator =  (const matrix33 &m);  matrix44		&operator += (const matrix44 &m);  matrix44		&operator -= (const matrix44 &m);  matrix44		&operator *= (const matrix44 &m);  matrix44		&operator *= (float f);  matrix44		&operator /= (float f);  friend bool		operator == (const matrix44 &a, const matrix44 &b);  friend bool		operator != (const matrix44 &a, const matrix44 &b);  friend matrix44	operator + (const matrix44 &a, const matrix44 &b);  friend matrix44	operator - (const matrix44 &a, const matrix44 &b);  friend matrix44	operator * (const matrix44 &a, const matrix44 &b);  friend vector3 	operator * (const matrix44 &m, const vector3 &v);  friend vector3 	operator * (const vector3 &v, const matrix44 &m);  friend vector4 	operator * (const matrix44 &m, const vector4 &v);  friend vector4 	operator * (const vector4 &v, const matrix44 &m);  friend matrix44	operator * (const matrix44 &m, float f);  friend matrix44	operator * (float f, const matrix44 &m);  friend matrix44	operator / (const matrix44 &m, float f);  //operator float*() {return (float*)col[0]; }; public:  // Methods  matrix44		&identity();  matrix44		&transpose();  matrix44		&invert();  // Debug  void			fprint(FILE* file, char* str) const;};matrix44	IdentityMatrix44();matrix44	TransposeMatrix44(const matrix44 &m);matrix44	InvertMatrix44(const matrix44 &m);matrix44	RotateRadMatrix44(char axis, float rad);matrix44	RotateRadMatrix44(const vector3 &axis, float rad);matrix44	TranslateMatrix44(float x, float y, float z);matrix44	ScaleMatrix44(float x, float y, float z, float w = 1.0);matrix44	LookAtMatrix44(const vector3 &camPos, const vector3 &camUp, 			    const vector3 &target );matrix44	FrustumMatrix44(float l, float r, float b, float t, 				float n, float f);matrix44	PerspectiveMatrix44(float fovY, float aspect, 				float n, float f);matrix44	OrthoMatrix44(float l, float r, float b, float t, 			    float n, float f);matrix44	OrthoNormalMatrix44(const vector3 &xdir, 				const vector3 &ydir, const vector3 &zdir);#endif

⌨️ 快捷键说明

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