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

📄 geometry.h

📁 robocuo相关资料robocuo相关资料
💻 H
字号:
#ifndef __GEOMETRY_H#define __GEOMETRY_H#include <cstdio>#include <cmath>#include <string>#include <iostream>#include <ostream>#include <vector>#include <algorithm>#define VALUE(a)  #a ": " << (a)#define EPS 0.00000001#define Pi (acos(-1))#define Min(A,B) ((A)<(B)?(A):(B))#define Max(A,B) ((A)>(B)?(A):(B))#define sqr(a) ((a)*(a))#define sign(a) (a>0?1:-1)struct Matrix;using namespace std;/*********************************************************************************** ******************************** Aria 3D Geometry ********************************** ***********************************************************************************/typedef double AngRad;typedef double AngDeg;//contains a set of static methods for comparing double numbersstruct CMP{	static bool eq(double a, double b);	static bool ne(double a, double b);	static bool lt(double a, double b);	static bool gt(double a, double b);	static bool le(double a, double b);	static bool ge(double a, double b);};// a enum that specifies the type of vectorenum CS{	CARTESIAN,	POLAR};/***************************************************************************************************************** Sphere Class *******************************************************************************************************************/class Sphere{	public:		Sphere();		 Sphere(double R,double Phi,double Teta);		double Get_R(void);		double Get_Phi(void);		double Get_Teta(void);	private:		double G_R;		double G_Phi;		double G_Teta;	};/***************************************************************************************************************** Geometry Class *******************************************************************************************************************//***************************************************************************************************************** Vector2d Class *******************************************************************************************************************/// Represents a 2 Dimentional vectorstruct Vector3d;struct Vector2d{	double   x,y;	Vector2d ();	explicit Vector2d (const Vector3d &v);	Vector2d (double a, double b, CS _cs=CARTESIAN);	void setVector(double a, double b, CS _cs=CARTESIAN);	double & X           (          );	double & Y           (          );	Vector2d operator- (          );	Vector2d operator+ (Vector2d p);	Vector2d operator* (Vector2d p);	Vector2d operator/ (Vector2d p);	Vector2d operator/=(Vector2d p);	Vector2d operator*=(Vector2d p);	Vector2d operator+=(Vector2d p);	Vector2d operator- (Vector2d p);	Vector2d operator-=(Vector2d p);	Vector2d operator* (double d  );	Vector2d operator*=(double d  );	Vector2d operator/ (double d  );	Vector2d operator/=(double d  );	bool     operator==(Vector2d p);	bool     operator!=(Vector2d p);	double   magnitude   (          ) const;	void     setMagnitude(double d  );	double   angle       (          ) const;	double   angleTo     (Vector2d v);	double   distance    (Vector2d p);	void 	 rotate	     (double a	);	Vector2d rotate      (Vector2d c, double d);	Vector2d rotate      (Vector2d c, double Sin, double Cos);};/***************************************************************************************************************** Vector3d Class *******************************************************************************************************************/struct Vector3d{	private:		double mX,mY,mZ;	public:		explicit Vector3d(double a =0.0 , double b =0.0, double c =0.0, CS type = CARTESIAN);// X, Y, Z || Magnitude, Theta, Phi//Theta is in X,Y Plane and Phi is the angle between that plain and vector		explicit Vector3d(Vector2d vec);		void setVector(double a =0.0 , double b =0.0, double c =0.0, CS type = CARTESIAN);		void setVector( Vector2d vec );		Vector2d get_vector2d(	);		Vector3d operator - (                            );		Vector3d operator + ( Vector3d p                 )const ;		Vector3d operator - ( Vector3d p                 )const ;		Vector3d operator * ( double d                   )const;		Vector3d operator * ( Vector3d p                 )const;		// Operator '%' : Cross multiplication of two Vector		Vector3d operator % ( const Vector3d &p          )const; 		double   operator & ( const Vector3d &p          )const;		Vector3d operator / ( double d                   )const;		Vector3d operator / ( Vector3d p                 )const;		Vector3d operator = ( double d                   );		Vector3d operator += ( Vector3d p                );		Vector3d operator -= ( Vector3d p                );		Vector3d operator *= ( double d                  );		void     operator *= ( Vector3d p                );		Vector3d operator /= ( double d                  );		void     operator /= ( Vector3d &p               );		bool     operator == ( Vector3d p                );		bool     operator != ( Vector3d p                );		double & X();		double & Y();		double & Z();		double X() const;		double Y() const;		double Z() const;		double theta()const;		double phi()const;		double magnitude() const;		void setTheta(double theta);		void setPhi(double phi);		void setMagnitude(double length);		AngDeg Angle(Vector3d vector);		Vector3d getNormalized() const;		Vector3d normalize();		double getDistanceTo(Vector3d vec);		Vector3d rotate2d(double ang);		Vector3d rotate(double ang);		double ang();		operator Vector2d ();};/******************************************************************************************************************* Line Class *********************************************************************************************************************//***************************************************************************************************************** Line3d Class *********************************************************************************************************************//******************************************************************************************************************* Segment Class ******************************************************************************************************************//***************************************************************************************************************** Segment3d Class ******************************************************************************************************************//******************************************************************************************************************* Circle Class *******************************************************************************************************************//******************************************************************************************************************** Angle Class *******************************************************************************************************************///Contains a set of static methods for dealing with anglesstruct Angle{// between 0 and 360	static AngDeg normalizeAngle( AngDeg angle );// between -180 and 180	static AngDeg normalizeAngle2 ( AngDeg angle  );	static double minAngle(AngDeg a, AngDeg b);	static double maxAngle(AngDeg a, AngDeg b);	static int cmpAngle(AngDeg a, AngDeg b);	static AngDeg bisectorAngle( AngDeg ang1, AngDeg ang2 );//	static Ray bisector ( Vector2d center, Vector2d leftLeg, Vector2d rightLeg );	static double pointsAngle ( Vector2d center, Vector2d leftLeg, Vector2d rightLeg );	static bool isAngInRange( AngDeg ang1, AngDeg ang2, AngDeg ang );	static bool isPointInRange( Vector2d center, Vector2d leftLeg, Vector2d rightLeg , Vector2d p);	static AngDeg Rad2Deg( AngRad x );	static AngRad Deg2Rad( AngDeg x );	static double cosDeg( AngDeg x );	static double sinDeg( AngDeg x );	static double tanDeg( AngDeg x );	static AngDeg atanDeg( double x );	static double atan2Deg( double x, double y );	static AngDeg acosDeg( double x );	static AngDeg asinDeg( double x );};/***************************************************************************************************************** Rectangle Class ******************************************************************************************************************//***************************************************************************************************************** Polygon Class ********************************************************************************************************************//***************************************************************************************************************** Rectangular Cube******************************************************************************************************************//*    1---------0  / |        /|3----------2  ||   |      |  ||   |      |  ||   5------|--4| /        | /7----------6*/	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//-------------------------------------> Polar To Cartesian <-----------------------------------//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/******************************************************************************************************************** GeomUT Class ******************************************************************************************************************/#endif

⌨️ 快捷键说明

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