#ifndef C_ANGLE_H #define C_ANGLE_H #include "SSystem/SComponent/c_xyz.h" #include "dolphin/types.h" class cSAngle { private: s16 mAngle; public: const static cSAngle _0; const static cSAngle _1; const static cSAngle _90; const static cSAngle _180; const static cSAngle _270; cSAngle() {} ~cSAngle() {} cSAngle(const cSAngle&); cSAngle(s16); cSAngle(float); s16 Val() const { return this->mAngle; } // void Set(s16 angle) { this->mAngle = angle; } void Val(const cSAngle&); void Val(s16); void Val(float); float Degree(void) const; float Radian(void) const; float Norm(void) const; s16 Abs(void) const; s16 Inv(void) const; float Sin(void) const; float Cos(void) const; cSAngle operator-(void) const; cSAngle operator+(const cSAngle&) const; cSAngle operator-(const cSAngle&) const; void operator+=(const cSAngle&); void operator-=(const cSAngle&); cSAngle operator+(short) const; cSAngle operator-(short) const; void operator+=(short); cSAngle operator*(float) const; void operator*=(float); bool operator<(const cSAngle& other) const { return mAngle < other.mAngle; } bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; } operator s16(void) const { return mAngle; } void operator=(const cSAngle& other) { mAngle = other.mAngle; } static inline cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); } inline void mirrorAtMaxNeg(void) { *this = cSAngle((s16)-0x8000) - *this; } }; cSAngle operator+(short, const cSAngle&); cSAngle operator-(short, const cSAngle&); class cDegree { private: float mDegree; public: cDegree(float); cDegree& Formal(void); void Val(float); float Radian(void) const; float Sin(void) const; float Cos(void) const; float Tan(void) const; }; class cSPolar { private: float mRadial; cSAngle mAngle1; cSAngle mAngle2; public: cSPolar() {} cSPolar(const cXyz&); cSPolar& Formal(void); void Val(float, short, short); void Val(const cXyz&); cXyz Xyz(void) const; void Globe(class cSGlobe*) const; }; class cSGlobe { private: float mRadius; cSAngle mAzimuth; // original: V cSAngle mInclination; // original: U public: cSGlobe(const cSGlobe&); cSGlobe(float, short, short); cSGlobe(float, const cSAngle&, const cSAngle&); cSGlobe(const cXyz&); ~cSGlobe() {} cSGlobe& Formal(void); void Val(const cSGlobe&); void Val(float, short, short); void Val(float, const cSAngle&, const cSAngle&); void Val(const cXyz&); float R(void) const { return mRadius; } const cSAngle& V(void) const { return mAzimuth; } const cSAngle& U(void) const { return mInclination; } cXyz Xyz(void) const; void Polar(cSPolar*) const; cXyz Norm(void) const; cSGlobe& Invert(void); }; #endif /* C_ANGLE_H */