X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftrunk%2FETL%2F_angle.h;h=20f82617d5a980efe678896a3c7eef22098f1178;hb=18bbe511c4b334ebca61b4a22662750d07521f37;hp=cfa7dc27b772b8162a5cc85f70cffd75f109bd9d;hpb=cee5940bae97612105db8b7e1ffcf513f9d9150c;p=synfig.git diff --git a/ETL/trunk/ETL/_angle.h b/ETL/trunk/ETL/_angle.h index cfa7dc2..20f8261 100644 --- a/ETL/trunk/ETL/_angle.h +++ b/ETL/trunk/ETL/_angle.h @@ -1,7 +1,8 @@ +#include /* ======================================================================== ** Extended Template and Library ** Angle Abstraction Class Implementation -** $Id: _angle.h,v 1.1.1.1 2005/01/04 01:31:46 darco Exp $ +** $Id$ ** ** Copyright (c) 2002 Robert B. Quattlebaum Jr. ** @@ -59,7 +60,7 @@ public: protected: typedef value_type unit; - unit v; //! Stored in rotations + unit v; //! Stored in radians public: @@ -122,8 +123,8 @@ public: operator~()const { angle ret; - ret.v=(value_type)std::floor(v+0.5f); - return ret; + ret.v = v+PI; + return ret.mod(); } /*! Returns true if the shortest @@ -131,16 +132,14 @@ public: right-hand side is clockwise */ bool operator<(const angle &rhs)const - { return v(const angle &rhs)const - { return v>rhs.v; } -// { return dist(rhs).v>(value_type)0.0; } + { return dist(rhs).v>(value_type)0.0; } /*! Returns true if the shortest angle between the left-hand and @@ -149,8 +148,7 @@ public: point on the unit circle. */ bool operator<=(const angle &rhs)const - { return v<=rhs.v; } -// { return dist(rhs).v<=(value_type)0.0; } + { return dist(rhs).v<=(value_type)0.0; } /*! Returns true if the shortest angle between the left-hand and @@ -159,24 +157,21 @@ public: point on the unit circle. */ bool operator>=(const angle &rhs)const - { return v>=rhs.v; } -// { return dist(rhs).v>=(value_type)0.0; } + { return dist(rhs).v>=(value_type)0.0; } /*! Returns true if the angles are refer to the same point on the unit circle. */ bool operator==(const angle &rhs)const - { return v==rhs.v; } -// { return dist(rhs).v==(value_type)0.0; } + { return std::abs(dist(rhs).v)epsilon; } //! Angle Difference Function /*! This function will return the @@ -237,9 +232,11 @@ private: static value_type rot_floor(value_type x) { return static_cast(std::floor(x/(PI*2))*PI*2); } + static const value_type epsilon = 1.0e-6; + public: /* - ** Converstion Classes + ** Conversion Classes */ class rad; @@ -247,7 +244,7 @@ public: class rot; /* - ** Trigometric Classes + ** Trigonometric Classes */ class sin;