constants.h
Go to the documentation of this file.
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2016, Rice University
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Rice University nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  */
34 
37 #ifndef FCL_MATH_CONSTANTS_
38 #define FCL_MATH_CONSTANTS_
39 
40 #include "fcl/common/types.h"
41 
42 #include <limits>
43 #include <cmath>
44 
45 namespace fcl {
46 
47 namespace detail {
48 
49 // Helper struct for determining the underlying numerical type of scalars.
50 // Allows us to treat AutoDiffScalar<double> and double as double type and
51 // AutoDiffScalar<float> and float as float type.
52 template<typename S>
53 struct ScalarTrait {
54  // NOTE: This relies on AutoDiffScalar's `Real` class member and serves as
55  // an entry path for any custom scalar class that likewise defines a `Real`
56  // class member.
57  typedef typename S::Real type;
58 };
59 
60 template<>
61 struct ScalarTrait<long double> {
62  typedef long double type;
63 };
64 
65 template<>
66 struct ScalarTrait<double> {
67  typedef double type;
68 };
69 
70 template<>
71 struct ScalarTrait<float> {
72  typedef float type;
73 };
74 
75 } // namespace detail
76 
128 template <typename S>
129 struct FCL_EXPORT constants
130 {
132 
134 static constexpr S pi() { return S(3.141592653589793238462643383279502884197169399375105820974944592L); }
135 
137 static constexpr S phi() { return S(1.618033988749894848204586834365638117720309179805762862135448623L); }
138 
146  static const Real value = eps_78();
147  return value;
148 }
149 
151 static constexpr Real eps() {
152  static_assert(std::is_floating_point<Real>::value,
153  "Constants can only be evaluated for scalars with floating "
154  "point implementations");
156 }
157 
158 // TODO(SeanCurtis-TRI) These are *not* declared constexpr because the clang
159 // compiler available in the current CI configuration for ubuntu and mac does
160 // not have std::pow declared as constexpr. When that changes, these can
161 // likewise be declared as constexpr.
162 
164 static Real eps_78() {
165  static const Real value = std::pow(eps(), 7./8.);
166  return value;
167 }
168 
170 static Real eps_34() {
171  static const Real value = std::pow(eps(), 3./4.);
172  return value;
173 }
174 
176 static Real eps_12() {
177  static const Real value = std::pow(eps(), 1./2.);
178  return value;
179 }
180 
181 };
182 
185 
186 } // namespace fcl
187 
188 #endif
fcl::constants::eps_34
static Real eps_34()
Returns ε^(3/4) for the precision of the underlying scalar type.
Definition: constants.h:170
types.h
fcl::constants::eps_78
static Real eps_78()
Returns ε^(7/8) for the precision of the underlying scalar type.
Definition: constants.h:164
epsilon
S epsilon()
Definition: test_fcl_simple.cpp:56
fcl::constants::eps
static constexpr Real eps()
Returns ε for the precision of the underlying scalar type.
Definition: constants.h:151
fcl::detail::ScalarTrait< double >::type
double type
Definition: constants.h:67
fcl::constants::Real
detail::ScalarTrait< S >::type Real
Definition: constants.h:131
fcl::constants::phi
static constexpr S phi()
The golden ratio.
Definition: constants.h:137
fcl::detail::ScalarTrait< long double >::type
long double type
Definition: constants.h:62
fcl::detail::ScalarTrait
Definition: constants.h:53
fcl::constants::gjk_default_tolerance
static Real gjk_default_tolerance()
Definition: constants.h:145
fcl::constants::pi
static constexpr S pi()
The mathematical constant pi.
Definition: constants.h:134
fcl::detail::ScalarTrait< float >::type
float type
Definition: constants.h:72
fcl::constants::eps_12
static Real eps_12()
Returns ε^(1/2) for the precision of the underlying scalar type.
Definition: constants.h:176
fcl::detail::ScalarTrait::type
S::Real type
Definition: constants.h:57
fcl::constants
Definition: constants.h:129
fcl
Main namespace.
Definition: broadphase_bruteforce-inl.h:45


fcl
Author(s):
autogenerated on Tue Dec 5 2023 03:40:48