23 auto const& centroid()
const {
return center; }
25 constexpr bool is_valid()
const noexcept
30 constexpr tcircle valid()
const noexcept
32 return { center, std::abs(radius) };
35 constexpr bool contains(glm::tvec2<T> pt)
const noexcept
37 const auto d = pt - center;
38 return (d.x * d.x) / (radius * radius) + (d.y * d.y) / (radius * radius) <= T(1);
41 constexpr T edge_length()
const noexcept
43 return glm::pi<T>() * 2 * radius;
46 constexpr glm::tvec2<T> edge_point_alpha(T t)
const
48 const auto angle = t * glm::pi<T>() * 2;
49 return center + glm::tvec2<T>{cos(angle), sin(angle)} * radius;
52 constexpr T calculate_area()
const noexcept {
return glm::pi<T>() * radius * radius; }
53 constexpr glm::tvec2<T> edge_point(T t)
const noexcept {
return edge_point_alpha(t / edge_length()); }
54 constexpr trec2<T> bounding_box()
const noexcept {
return trec2<T>::from_center_and_half_size(center, {radius, radius}); }
56 glm::tvec2<T> closest_point_to(glm::tvec2<T> pt)
const
58 return center + glm::normalize(pt - center) * radius;