File: Sphere.hh

package info (click to toggle)
ignition-math 6.7.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,396 kB
  • sloc: cpp: 22,476; python: 2,730; ansic: 1,152; ruby: 844; sh: 168; makefile: 14
file content (141 lines) | stat: -rw-r--r-- 5,530 bytes parent folder | download
1
2
3
4
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
137
138
139
140
141
/*
 * Copyright (C) 2018 Open Source Robotics Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/
#ifndef IGNITION_MATH_SPHERE_HH_
#define IGNITION_MATH_SPHERE_HH_

#include "ignition/math/MassMatrix3.hh"
#include "ignition/math/Material.hh"
#include "ignition/math/Quaternion.hh"

namespace ignition
{
  namespace math
  {
    // Foward declarations
    class SpherePrivate;

    // Inline bracket to help doxygen filtering.
    inline namespace IGNITION_MATH_VERSION_NAMESPACE {
    //
    /// \class Sphere Sphere.hh ignition/math/Sphere.hh
    /// \brief A representation of a sphere.
    ///
    /// The sphere class supports defining a sphere with a radius and
    /// material properties. Radius is in meters.
    /// See Material for more on material properties.
    template<typename Precision>
    class Sphere
    {
      /// \brief Default constructor. The default radius is zero.
      public: Sphere() = default;

      /// \brief Construct a sphere with a radius.
      /// \param[in] _radius Radius of the sphere.
      public: explicit Sphere(const Precision _radius);

      /// \brief Construct a sphere with a radius, material
      /// \param[in] _radius Radius of the sphere.
      /// \param[in] _mat Material property for the sphere.
      public: Sphere(const Precision _radius, const Material &_mat);

      /// \brief Destructor
      public: ~Sphere() = default;

      /// \brief Get the radius in meters.
      /// \return The radius of the sphere in meters.
      public: Precision Radius() const;

      /// \brief Set the radius in meters.
      /// \param[in] _radius The radius of the sphere in meters.
      public: void SetRadius(const Precision _radius);

      /// \brief Get the material associated with this sphere.
      /// \return The material assigned to this sphere
      public: const ignition::math::Material &Material() const;

      /// \brief Set the material associated with this sphere.
      /// \param[in] _mat The material assigned to this sphere
      public: void SetMaterial(const ignition::math::Material &_mat);

      /// \brief Get the mass matrix for this sphere. This function
      /// is only meaningful if the sphere's radius and material have been set.
      /// \param[out] _massMat The computed mass matrix will be stored
      /// here.
      /// \return False if computation of the mass matrix failed, which
      /// could be due to an invalid radius (<=0) or density (<=0).
      public: bool MassMatrix(MassMatrix3d &_massMat) const;

      /// \brief Check if this sphere is equal to the provided sphere.
      /// Radius and material properties will be checked.
      public: bool operator==(const Sphere &_sphere) const;

      /// \brief Check if this sphere is not equal to the provided sphere.
      /// Radius and material properties will be checked.
      public: bool operator!=(const Sphere &_sphere) const;

      /// \brief Get the volume of the sphere in m^3.
      /// \return Volume of the sphere in m^3.
      public: Precision Volume() const;

      /// \brief Compute the sphere's density given a mass value. The
      /// sphere is assumed to be solid with uniform density. This
      /// function requires the sphere's radius to be set to a
      /// value greater than zero. The Material of the sphere is ignored.
      /// \param[in] _mass Mass of the sphere, in kg. This value should be
      /// greater than zero.
      /// \return Density of the sphere in kg/m^3. A negative value is
      /// returned if radius or _mass is <= 0.
      public: Precision DensityFromMass(const Precision _mass) const;

      /// \brief Set the density of this sphere based on a mass value.
      /// Density is computed using
      /// Precision DensityFromMass(const Precision _mass) const. The
      /// sphere is assumed to be solid with uniform density. This
      /// function requires the sphere's radius to be set to a
      /// value greater than zero. The existing Material density value is
      /// overwritten only if the return value from this true.
      /// \param[in] _mass Mass of the sphere, in kg. This value should be
      /// greater than zero.
      /// \return True if the density was set. False is returned if the
      /// sphere's radius or the _mass value are <= 0.
      /// \sa Precision DensityFromMass(const Precision _mass) const
      public: bool SetDensityFromMass(const Precision _mass);

      /// \brief Radius of the sphere.
      private: Precision radius = 0.0;

      /// \brief the sphere's material.
      private: ignition::math::Material material;
    };

    /// \typedef Sphere<int> Spherei
    /// \brief Sphere with integer precision.
    typedef Sphere<int> Spherei;

    /// \typedef Sphere<double> Sphered
    /// \brief Sphere with double precision.
    typedef Sphere<double> Sphered;

    /// \typedef Sphere<float> Spheref
    /// \brief Sphere with float precision.
    typedef Sphere<float> Spheref;
    }
  }
}
#include "ignition/math/detail/Sphere.hh"

#endif