7#include "geometry_common.h"
22 template <
typename SHAPE,
typename T>
24 {
shape.edge_length() } -> std::convertible_to<T>;
25 {
shape.edge_point_alpha(
t) } -> std::convertible_to<glm::tvec2<T>>;
26 {
shape.edge_point(
t) } -> std::convertible_to<glm::tvec2<T>>;
27 {
shape.bounding_box() } -> std::convertible_to<trec2<T>>;
30 {
shape.projected(
pt) } -> std::convertible_to<glm::tvec2<T>>;
37 template <
typename T, shape<T> S>
auto distance(
S const&
sh, glm::tvec2<T>
pt) {
return glm::distance(
sh.projected(
pt),
pt); }
38 template <
typename T, shape<T> S>
auto distance(glm::tvec2<T>
pt,
S const&
sh) {
return glm::distance(
sh.projected(
pt),
pt); }
40 template <
typename T, shape<T> S>
auto distance_squared(
S const&
sh, glm::tvec2<T>
pt) {
const auto d =
sh.projected(
pt) -
pt;
return glm::dot(
d,
d); }
41 template <
typename T, shape<T> S>
auto distance_squared(glm::tvec2<T>
pt,
S const&
sh) {
const auto d =
sh.projected(
pt) -
pt;
return glm::dot(
d,
d); }
50 template <
typename SHAPE,
typename T>
52 {
shape.contains(
pt) } -> std::convertible_to<bool>;
53 {
shape.calculate_area() } -> std::convertible_to<T>;
constexpr auto bit_count
Equal to the number of bits in the type.