Parasol Planning Library (PPL)
AbstractBoundingSphere.h
Go to the documentation of this file.
1 #ifndef ABSTRACT_BOUNDING_SPHERE_H_
2 #define ABSTRACT_BOUNDING_SPHERE_H_
3 
4 #include "Boundary.h"
6 
7 
12 class AbstractBoundingSphere : public Boundary, public NSphere {
13 
14  public:
15 
18 
23  explicit AbstractBoundingSphere(const size_t _n,
24  const double _radius = std::numeric_limits<double>::max());
25 
30  explicit AbstractBoundingSphere(const std::vector<double>& _center,
31  const double _radius = std::numeric_limits<double>::max());
32 
36 
37  virtual ~AbstractBoundingSphere() noexcept;
38 
42 
43  virtual size_t GetDimension() const noexcept override;
44 
45  virtual double GetMaxDist(const double _r1 = 2.0, const double _r2 = 0.5)
46  const override;
47 
48  virtual const Range<double>& GetRange(const size_t _i) const override;
49 
50  virtual const std::vector<double>& GetCenter() const noexcept override;
51 
52  virtual double GetVolume() const noexcept override;
53 
57 
58  virtual std::vector<double> GetRandomPoint() const override;
59 
60  virtual void PushInside(std::vector<double>& _sample) const noexcept override;
61 
65 
66  using Boundary::InBoundary;
67 
68  virtual bool InBoundary(const std::vector<double>& _p) const override;
69 
73 
74  virtual double GetClearance(const Vector3d& _p) const override;
75 
76  virtual Vector3d GetClearancePoint(const Vector3d& _p) const override;
77 
81 
82  virtual void SetCenter(const std::vector<double>& _c) noexcept override;
83 
84  virtual void Translate(const Vector3d& _v) override;
85 
86  virtual void Translate(const std::vector<double>& _t) override;
87 
88  virtual void ResetBoundary(const std::vector<std::pair<double, double>>& _bbx,
89  const double _margin) override;
90 
94 
95  virtual void Read(std::istream& _is, CountingStreamBuffer& _cbs) override;
96 
97  virtual void Write(std::ostream& _os) const override;
98 
100 
101  private:
102 
105 
107  std::vector<Range<double>> ComputeRange() const;
108 
112 
113  std::vector<Range<double>> m_range;
114 
116 
117 };
118 
119 /*----------------------------------- I/O ------------------------------------*/
120 
121 std::ostream& operator<<(std::ostream& _os, const AbstractBoundingSphere& _b);
122 
124 //std::istream& operator>>(std::istream& _is, const Boundary& _b);
125 
126 /*----------------------------------------------------------------------------*/
127 
128 #endif
Definition: AbstractBoundingSphere.h:12
virtual void Write(std::ostream &_os) const override
Definition: AbstractBoundingSphere.cpp:202
virtual void PushInside(std::vector< double > &_sample) const noexcept override
Definition: AbstractBoundingSphere.cpp:93
virtual std::vector< double > GetRandomPoint() const override
Get a random point inside the boundary.
Definition: AbstractBoundingSphere.cpp:86
AbstractBoundingSphere(const size_t _n, const double _radius=std::numeric_limits< double >::max())
Definition: AbstractBoundingSphere.cpp:12
virtual ~AbstractBoundingSphere() noexcept
virtual const std::vector< double > & GetCenter() const noexcept override
Get the boundary's center point.
Definition: AbstractBoundingSphere.cpp:71
virtual double GetMaxDist(const double _r1=2.0, const double _r2=0.5) const override
Definition: AbstractBoundingSphere.cpp:54
virtual void Translate(const Vector3d &_v) override
Definition: AbstractBoundingSphere.cpp:144
virtual Vector3d GetClearancePoint(const Vector3d &_p) const override
Definition: AbstractBoundingSphere.cpp:123
virtual void SetCenter(const std::vector< double > &_c) noexcept override
Definition: AbstractBoundingSphere.cpp:132
virtual void Read(std::istream &_is, CountingStreamBuffer &_cbs) override
Definition: AbstractBoundingSphere.cpp:186
virtual void ResetBoundary(const std::vector< std::pair< double, double >> &_bbx, const double _margin) override
Definition: AbstractBoundingSphere.cpp:163
virtual const Range< double > & GetRange(const size_t _i) const override
Definition: AbstractBoundingSphere.cpp:61
virtual bool InBoundary(const Vector3d &_p) const
Definition: Boundary.cpp:94
virtual double GetVolume() const noexcept override
Get the boundary's volume (Lebesgue Measure).
Definition: AbstractBoundingSphere.cpp:78
virtual size_t GetDimension() const noexcept override
Get the dimension of this boundary.
Definition: AbstractBoundingSphere.cpp:47
virtual double GetClearance(const Vector3d &_p) const override
Definition: AbstractBoundingSphere.cpp:116
Definition: Boundary.h:30
Definition: CountingStreamBuffer.h:20
Definition: NSphere.h:18
Definition: XMLNode.h:27
A range of numeric values.
Definition: Range.h:17