projects
/
synfig.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Removed the 'fixme' comment, because I fixed it already.
[synfig.git]
/
ETL
/
trunk
/
ETL
/
_angle.h
diff --git
a/ETL/trunk/ETL/_angle.h
b/ETL/trunk/ETL/_angle.h
index
3080366
..
78e91ba
100644
(file)
--- a/
ETL/trunk/ETL/_angle.h
+++ b/
ETL/trunk/ETL/_angle.h
@@
-5,6
+5,7
@@
** $Id$
**
** Copyright (c) 2002 Robert B. Quattlebaum Jr.
** $Id$
**
** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@
-40,6
+41,8
@@
# define HALF_PI (PI/2)
#endif
# define HALF_PI (PI/2)
#endif
+#define ANGLE_EPSILON (1.0e-6)
+
/* === T Y P E D E F S ===================================================== */
/* === C L A S S E S & S T R U C T S ======================================= */
/* === T Y P E D E F S ===================================================== */
/* === C L A S S E S & S T R U C T S ======================================= */
@@
-60,7
+63,7
@@
public:
protected:
typedef value_type unit;
protected:
typedef value_type unit;
- unit v; //! Stored in radians
+ unit v; //! Stored in radians
; positive values indicate counter-clockwise.
public:
public:
@@
-128,22
+131,22
@@
public:
}
/*! Returns true if the shortest
}
/*! Returns true if the shortest
- angle
between the left-hand and
- right-hand side is clockwise */
+ angle
from the left-hand to the
+ right-hand side is c
ounter-c
lockwise */
bool
operator<(const angle &rhs)const
{ return dist(rhs).v<(value_type)0.0; }
/*! Returns true if the shortest
bool
operator<(const angle &rhs)const
{ return dist(rhs).v<(value_type)0.0; }
/*! Returns true if the shortest
- angle
between the left-hand and
- right-hand side is c
ounter-c
lockwise */
+ angle
from the left-hand to the
+ right-hand side is clockwise */
bool
operator>(const angle &rhs)const
{ return dist(rhs).v>(value_type)0.0; }
/*! Returns true if the shortest
bool
operator>(const angle &rhs)const
{ return dist(rhs).v>(value_type)0.0; }
/*! Returns true if the shortest
- angle
between the left-hand and
- right-hand side is clockwise,
+ angle
from the left-hand to the
+ right-hand side is c
ounter-c
lockwise,
or if the angles are refer to the same
point on the unit circle. */
bool
or if the angles are refer to the same
point on the unit circle. */
bool
@@
-151,8
+154,8
@@
public:
{ return dist(rhs).v<=(value_type)0.0; }
/*! Returns true if the shortest
{ return dist(rhs).v<=(value_type)0.0; }
/*! Returns true if the shortest
- angle
between the left-hand and
- right-hand side is c
ounter-c
lockwise,
+ angle
from the left-hand to the
+ right-hand side is clockwise,
or if the angles are refer to the same
point on the unit circle. */
bool
or if the angles are refer to the same
point on the unit circle. */
bool
@@
-164,14
+167,25
@@
public:
on the unit circle. */
bool
operator==(const angle &rhs)const
on the unit circle. */
bool
operator==(const angle &rhs)const
- { return std::abs(dist(rhs).v)<
epsilon
; }
+ { return std::abs(dist(rhs).v)<
ANGLE_EPSILON
; }
/*! Returns false if the angles
are refer to the same point
on the unit circle. */
bool
operator!=(const angle &rhs)const
/*! Returns false if the angles
are refer to the same point
on the unit circle. */
bool
operator!=(const angle &rhs)const
- { return std::abs(dist(rhs).v)>epsilon; }
+ { return std::abs(dist(rhs).v)>ANGLE_EPSILON; }
+
+ //! Absolute Angle Function
+ /*! This function will return the
+ absolute value of the angle. */
+ angle
+ abs()const
+ {
+ angle ret;
+ ret.v=std::abs(v);
+ return ret;
+ }
//! Angle Difference Function
/*! This function will return the
//! Angle Difference Function
/*! This function will return the
@@
-198,6
+212,7
@@
public:
return ret;
}
return ret;
}
+ //! Zero Rotation (0 degrees)
static angle
zero()
{
static angle
zero()
{
@@
-206,31
+221,31
@@
public:
return ret;
}
return ret;
}
+ //! One Complete Rotation (360 degrees)
static angle
one()
{
angle ret;
static angle
one()
{
angle ret;
- ret.v=PI;
+ ret.v=PI
*2
;
return ret;
}
return ret;
}
+ //! One Half Rotation (180 degrees)
static angle
half()
{
angle ret;
static angle
half()
{
angle ret;
- ret.v=PI
*0.5
;
+ ret.v=PI;
return ret;
}
return ret;
}
- bool operator!()const { return
v==0
; }
+ bool operator!()const { return
std::abs(mod().v) < ANGLE_EPSILON
; }
private:
static value_type rot_floor(value_type x)
{ return static_cast<value_type>(std::floor(x/(PI*2))*PI*2); }
private:
static value_type rot_floor(value_type x)
{ return static_cast<value_type>(std::floor(x/(PI*2))*PI*2); }
- static const value_type epsilon = 1.0e-6;
-
public:
/*
** Conversion Classes
public:
/*
** Conversion Classes
@@
-283,12
+298,12
@@
public:
rad(const angle &a):angle(a) { }
rad mod()const { return angle::mod(); }
rad dist(const angle &rhs)const { return angle::dist(rhs); }
rad(const angle &a):angle(a) { }
rad mod()const { return angle::mod(); }
rad dist(const angle &rhs)const { return angle::dist(rhs); }
+ value_type get()const { return v; }
#ifndef ETL_NO_DEPRECATED
#ifndef ETL_NO_DEPRECATED
- operator value_type()const ETL_DEPRECATED_FUNCTION;
+
//
operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
#endif
- value_type get()const { return v; }
}; // END of class angle::radians
}; // END of class angle::radians
-inline angle::rad::operator angle::value_type()const { return get(); }
+
//
inline angle::rad::operator angle::value_type()const { return get(); }
// ========================================================================
/*! \class angle::deg _angle.h ETL/angle
// ========================================================================
/*! \class angle::deg _angle.h ETL/angle
@@
-305,10
+320,10
@@
public:
deg dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return v*360/(PI*2); }
#ifndef ETL_NO_DEPRECATED
deg dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return v*360/(PI*2); }
#ifndef ETL_NO_DEPRECATED
- operator value_type()const ETL_DEPRECATED_FUNCTION;
+
//
operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
}; // END of class angle::degrees
#endif
}; // END of class angle::degrees
-inline angle::deg::operator angle::value_type()const { return get(); }
+
//
inline angle::deg::operator angle::value_type()const { return get(); }
// ========================================================================
/*! \class angle::rot _angle.h ETL/angle
// ========================================================================
/*! \class angle::rot _angle.h ETL/angle
@@
-325,10
+340,10
@@
public:
rot dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return v/(PI*2); }
#ifndef ETL_NO_DEPRECATED
rot dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return v/(PI*2); }
#ifndef ETL_NO_DEPRECATED
- operator value_type()const ETL_DEPRECATED_FUNCTION;
+
//
operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
}; // END of class angle::rotations
#endif
}; // END of class angle::rotations
-inline angle::rot::operator angle::value_type()const { return get(); }
+
//
inline angle::rot::operator angle::value_type()const { return get(); }
// ========================================================================
/*! \class angle::sin _angle.h ETL/angle
// ========================================================================
/*! \class angle::sin _angle.h ETL/angle
@@
-345,10
+360,10
@@
public:
sin dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return static_cast<value_type>(std::sin(v)); }
#ifndef ETL_NO_DEPRECATED
sin dist(const angle &rhs)const { return angle::dist(rhs); }
value_type get()const { return static_cast<value_type>(std::sin(v)); }
#ifndef ETL_NO_DEPRECATED
- operator value_type()const ETL_DEPRECATED_FUNCTION;
+
//
operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
}; // END of class angle::sin
#endif
}; // END of class angle::sin
-inline angle::sin::operator angle::value_type()const { return get(); }
+
//
inline angle::sin::operator angle::value_type()const { return get(); }
// ========================================================================
/*! \class angle::cos _angle.h ETL/angle
// ========================================================================
/*! \class angle::cos _angle.h ETL/angle
@@
-363,12
+378,12
@@
public:
cos(const angle &a):angle(a) { }
cos mod()const { return angle::mod(); }
cos dist(const angle &rhs)const { return angle::dist(rhs); }
cos(const angle &a):angle(a) { }
cos mod()const { return angle::mod(); }
cos dist(const angle &rhs)const { return angle::dist(rhs); }
- operator value_type()const ETL_DEPRECATED_FUNCTION;
-#ifndef ETL_NO_DEPRECATED
value_type get()const { return (value_type)std::cos(v); }
value_type get()const { return (value_type)std::cos(v); }
+#ifndef ETL_NO_DEPRECATED
+ // operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
}; // END of class angle::cos
#endif
}; // END of class angle::cos
-inline angle::cos::operator angle::value_type()const { return get(); }
+
//
inline angle::cos::operator angle::value_type()const { return get(); }
// ========================================================================
/*! \class angle::tan _angle.h ETL/angle
// ========================================================================
/*! \class angle::tan _angle.h ETL/angle
@@
-384,12
+399,12
@@
public:
tan(const angle &a):angle(a) { }
tan mod()const { return angle::mod(); }
tan dist(const angle &rhs)const { return angle::dist(rhs); }
tan(const angle &a):angle(a) { }
tan mod()const { return angle::mod(); }
tan dist(const angle &rhs)const { return angle::dist(rhs); }
+ value_type get()const { return (value_type)std::tan(v); }
#ifndef ETL_NO_DEPRECATED
#ifndef ETL_NO_DEPRECATED
- operator value_type()const ETL_DEPRECATED_FUNCTION;
+
//
operator value_type()const ETL_DEPRECATED_FUNCTION;
#endif
#endif
- value_type get()const { return (value_type)std::tan(v); }
}; // END of class angle::tan
}; // END of class angle::tan
-inline angle::tan::operator angle::value_type()const { return get(); }
+
//
inline angle::tan::operator angle::value_type()const { return get(); }
_ETL_END_NAMESPACE
_ETL_END_NAMESPACE