📄 geometry.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 + -