Program Listing for File circle.h¶
↰ Return to documentation for file (src/rlenvs/utils/geometry/shapes/circle.h)
#ifndef CIRCLE_H
#define CIRCLE_H
#include "rlenvs/rlenvs_types_v2.h"
#include "rlenvs/rlenvs_consts.h"
#include "rlenvs/utils/geometry/geom_point.h"
#include <cmath>
namespace rlenvscpp{
namespace utils{
namespace geom{
class Circle
{
public:
explicit Circle(real_t r);
Circle(real_t r, const GeomPoint<2>& center);
real_t radius()const noexcept{return r_;}
GeomPoint<2> center()const noexcept{return center_;}
real_t area()const;
bool is_inside(const GeomPoint<2>& point, real_t tol = rlenvscpp::consts::TOLERANCE)const;
bool is_inside(const real_t x, const real_t y, real_t tol = rlenvscpp::consts::TOLERANCE)const;
private:
real_t r_;
GeomPoint<2> center_;
};
inline
Circle::Circle(real_t r)
:
r_(r),
center_(0.0)
{}
inline
Circle::Circle(real_t r, const GeomPoint<2>& center)
:
r_(r),
center_(center)
{}
inline
real_t
Circle::area()const{
return rlenvscpp::consts::maths::PI*r_*r_;
}
inline
bool
Circle::is_inside(const GeomPoint<2>& point, real_t tol)const{
if(std::pow((center_[0] - point[0]), 2) + std::pow((center_[1] - point[1]), 2) - r_*r_ < tol){
return true;
}
return false;
}
inline
bool
Circle::is_inside(const real_t x, const real_t y, real_t tol)const{
return is_inside({x, y}, tol);
}
}
}
}
#endif // CIRCLE_H