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