Robotics Library  0.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Unit.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009, Markus Rickert
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of the Technische Universitaet Muenchen nor the names of
14 // its contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
28 //
29 
30 #ifndef _RL_MATH_UNIT_H_
31 #define _RL_MATH_UNIT_H_
32 
33 #include "Real.h"
34 
35 namespace rl
36 {
37  namespace math
38  {
162  enum Unit
163  {
182  };
183 
184  static const Real DEG2RAD = 0.017453292519943295769236907684886f;
185 
187  static const Real GRAVITY = 9.80665f;
188 
189  static const Real RAD2DEG = 57.295779513082320876798154814105f;
190 
191  inline void cartesianToPolar(const Real& x, const Real& y, Real& r, Real& theta)
192  {
193  r = ::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2));
194  theta = ::std::atan2(y, x);
195  }
196 
197  inline void cartesianToSpherical(const Real& x, const Real& y, const Real& z, Real& rho, Real& psi, Real& theta)
198  {
199  rho = ::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2) + ::std::pow(z, 2));
200  psi = ::std::atan2(::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2)), z);
201  theta = ::std::atan2(y, x);
202  }
203 
204  inline void polarToCartesian(const Real& r, const Real& theta, Real& x, Real& y)
205  {
206  x = r * ::std::cos(theta);
207  y = r * ::std::sin(theta);
208  }
209 
210  inline void sphericalToCartesian(const Real& rho, const Real& psi, const Real& theta, Real& x, Real& y, Real& z)
211  {
212  x = rho * ::std::sin(psi) * ::std::cos(theta);
213  y = rho * ::std::sin(psi) * ::std::sin(theta);
214  z = rho * ::std::cos(psi);
215  }
216  }
217 }
218 
219 #endif // _RL_MATH_UNIT_H_