8#include <initializer_list>
38template <
typename T,
size_t N>
struct Point
46 explicit Point(
const std::vector<T> &
v)
49 throw std::invalid_argument(
"Point: vector size mismatch");
50 for (
size_t i = 0;
i <
N; ++
i)
58 throw std::invalid_argument(
"Point: initializer list size mismatch");
71 static_assert(
N > 0,
"No x");
76 static_assert(
N > 1,
"No y");
81 static_assert(
N > 2,
"No z");
86 static_assert(
N > 3,
"No w");
92 static_assert(
N > 0,
"No x");
97 static_assert(
N > 1,
"No y");
102 static_assert(
N > 2,
"No z");
107 static_assert(
N > 3,
"No w");
115template <
typename T,
size_t N>
119 for (
size_t i = 0;
i <
N; ++
i)
124template <
typename T,
size_t N>
128 for (
size_t i = 0;
i <
N; ++
i)
133template <
typename T,
size_t N>
137 for (
size_t i = 0;
i <
N; ++
i)
142template <
typename T,
size_t N>
146 for (
size_t i = 0;
i <
N; ++
i)
155 for (
size_t i = 0;
i <
N; ++
i)
163 for (
size_t i = 0;
i <
N; ++
i)
171 for (
size_t i = 0;
i <
N; ++
i)
179 for (
size_t i = 0;
i <
N; ++
i)
201 for (
size_t i = 0;
i <
N; ++
i)
225template <
typename T,
size_t N>
236template <
typename T,
size_t N>
239 return a + (
b -
a) *
t;
242template <
typename T,
size_t N>
246 for (
size_t i = 0;
i <
N; ++
i)
Definition dbscan_clustering.hpp:11
std::vector< Point< T, N > > random(size_t count, const std::array< std::pair< T, T >, N > &axis_ranges, std::optional< unsigned int > seed=std::nullopt)
Generates a specified number of uniformly distributed random points in N-dimensional space.
Definition random.hpp:66
T length(const Point< T, N > &a)
Definition point.hpp:211
Point< T, N > operator/(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:143
Point< T, N > operator*(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:134
Point< T, N > lerp(const Point< T, N > &a, const Point< T, N > &b, T t)
Definition point.hpp:237
T length_squared(const Point< T, N > &a)
Definition point.hpp:206
Point< T, N > normalized(const Point< T, N > &a)
Definition point.hpp:216
Point< T, N > operator-(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:125
T distance(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:231
T dot(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:198
Point< T, N > clamp(const Point< T, N > &p, T min_val, T max_val)
Definition point.hpp:243
T distance_squared(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:226
Point< T, N > operator+(const Point< T, N > &a, const Point< T, N > &b)
Definition point.hpp:116
A fixed-size N-dimensional point/vector class.
Definition point.hpp:39
T & operator[](size_t i)
Definition point.hpp:65
T & z()
Definition point.hpp:79
const T & w() const
Definition point.hpp:105
Point(const std::array< T, N > &coords_)
Definition point.hpp:62
T & w()
Definition point.hpp:84
std::array< T, N > coords
Definition point.hpp:40
Point(const std::vector< T > &v)
Definition point.hpp:46
const T & operator[](size_t i) const
Definition point.hpp:66
T & x()
Definition point.hpp:69
const T & x() const
Definition point.hpp:90
const T & z() const
Definition point.hpp:100
const T & y() const
Definition point.hpp:95
Point(std::initializer_list< T > init)
Definition point.hpp:55
T & y()
Definition point.hpp:74