AlgorithmsAngleT.hh 6.04 KB
Newer Older
1 2 3
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
Jan Möbius's avatar
Jan Möbius committed
4
 *      Copyright (C) 2001-2010 by Computer Graphics Group, RWTH Aachen      *
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
 *                           www.openflipper.org                             *
 *                                                                           *
 *---------------------------------------------------------------------------*
 *  This file is part of OpenFlipper.                                        *
 *                                                                           *
 *  OpenFlipper is free software: you can redistribute it and/or modify      *
 *  it under the terms of the GNU Lesser General Public License as           *
 *  published by the Free Software Foundation, either version 3 of           *
 *  the License, or (at your option) any later version with the              *
 *  following exceptions:                                                    *
 *                                                                           *
 *  If other files instantiate templates or use macros                       *
 *  or inline functions from this file, or you compile this file and         *
 *  link it with other files to produce an executable, this file does        *
 *  not by itself cause the resulting executable to be covered by the        *
 *  GNU Lesser General Public License. This exception does not however       *
 *  invalidate any other reasons why the executable file might be            *
 *  covered by the GNU Lesser General Public License.                        *
 *                                                                           *
 *  OpenFlipper is distributed in the hope that it will be useful,           *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
 *  GNU Lesser General Public License for more details.                      *
 *                                                                           *
 *  You should have received a copy of the GNU LesserGeneral Public          *
 *  License along with OpenFlipper. If not,                                  *
 *  see <http://www.gnu.org/licenses/>.                                      *
 *                                                                           *
\*===========================================================================*/

/*===========================================================================*\
 *                                                                           *
 *   $Revision$                                                         *
 *   $Author$                                                      *
 *   $Date$                   *
 *                                                                           *
\*===========================================================================*/


//=============================================================================
//
//
//=============================================================================


#ifndef ALGORITHMSANGLE_HH
#define ALGORITHMSANGLE_HH


/*! \file AlgorithmsAngleT.hh
    \brief Functions for geometric operations related to angles
    
    General file with template functions handling angles
*/

//== INCLUDES =================================================================

//== FORWARDDECLARATIONS ======================================================

//== NAMESPACES ===============================================================

/// Namespace providing different geometric functions concerning angles
namespace ACG {
namespace Geometry {
   
//== CLASS DEFINITION =========================================================   
                       
/** Return a fully parametrized angle
   @param _vector1 vector pointing away from center, angle = 0
   @param _vector2 vector for which the angle should be calculated                    
   @param _normal  the normal used to compute if vector2 is left or right of vecor1
   @param _skip    Flag to catch nan. If true nan occured and value should not be used
   @return the angle (0 .. 2 * PI)
*/
template < typename VectorT , typename ValueT >
ValueT
getFullangle( VectorT _vector1, 
              VectorT _vector2, 
              const   VectorT& _normal, 
              bool&   skip );


/** Calculate the difference between two angles ( minimum distance )
   @param _angle0 angle1
   @param _angle1 angle2
   @return The difference between the angles (0..PI)
*/
template < typename ValueT >
inline
ValueT
angleDist( const ValueT& angle0 , 
           const ValueT& angle1 );
                  
/** Calculate the correct 2D angle if cos and sin of the angle are given
    This function calculates based on the signs of the acos and asin of the 
    given angles, in which quadrant the angle is and returns the full angle
    in radians
   @param _cos cos of angle
   @param _sin sin of angle
   @return angle
*/
template < typename ValueT >
inline
ValueT
getAngle( const ValueT& _cos , 
          const ValueT& _sin );      

/** Convert angle from radians to degree
   @param _angle in radians
   @return angle in degree
*/
template < typename ValueT >
inline
ValueT
radToDeg( const ValueT& _angle );      

/** Convert angle from degree to radians
   @param _angle in degree 
   @return angle in radians
*/
template < typename ValueT >
inline
ValueT
degToRad( const ValueT& _angle ); 


//=============================================================================
} // Geometry Namespace 
} // ACG Namespace 
//=============================================================================
#if defined(INCLUDE_TEMPLATES) && !defined(ALGORITHMSANGLE_C)
#define ALGORITHMSANGLE_TEMPLATES
Dirk Wilden's avatar
Dirk Wilden committed
137
#include "AlgorithmsAngleT.cc"
138 139 140 141 142
#endif
//=============================================================================
#endif // ALGORITHMSANGLE_HH defined
//=============================================================================