VIPRA Documentation
Loading...
Searching...
No Matches
circle.hpp
1#pragma once
2
3#include "vipra/geometry/f3d.hpp"
4#include "vipra/geometry/line.hpp"
5
6#include "vipra/macros/performance.hpp"
7
8namespace VIPRA::Geometry {
9class Circle {
10 // TODO(rolland): issue #17 add more
11 public:
12 constexpr Circle(VIPRA::f3d center, VIPRA::f_pnt radius)
13 : _center(center), _radius(radius)
14 {
15 }
16
17 [[nodiscard]] VIPRA_INLINE constexpr auto center() const -> const VIPRA::f3d&
18 {
19 return _center;
20 }
21 [[nodiscard]] VIPRA_INLINE constexpr auto radius() const -> const VIPRA::f_pnt&
22 {
23 return _radius;
24 }
25
33 [[nodiscard]] VIPRA_INLINE constexpr auto is_inside(VIPRA::f3d point) const -> bool
34 {
35 return (point.distance_to(_center) <= _radius);
36 }
37
38 [[nodiscard]] VIPRA_INLINE constexpr auto does_intersect(
39 VIPRA::Geometry::Line line) const noexcept -> bool
40 {
41 return line.closest_point(_center).distance_to(_center) <= _radius;
42 }
43
44 private:
45 VIPRA::f3d _center;
46 VIPRA::f_pnt _radius{};
47};
48
49} // namespace VIPRA::Geometry
VIPRA_INLINE constexpr auto is_inside(VIPRA::f3d point) const -> bool
Check if a point is inside the circle.
Definition circle.hpp:33
Definition line.hpp:11
Definition f3d.hpp:27