31#ifndef ALL_POINT_HEADER_INC
32#define ALL_POINT_HEADER_INC
43template <
class T>
class Point;
56 coordinates.resize(
d);
65 for (
auto i = 0; i <
d; ++i)
66 coordinates.at(i) = data[i];
72 Point(
const std::vector<T> &data) {
74 coordinates.insert(coordinates.begin(), data.begin(), data.end());
76 dimension = data.size();
92 Point(
const int d,
const T *data,
const T w,
const long i)
101 Point(
const std::vector<T> &data,
const T w) :
Point<T>(data) {
110 Point(
const std::vector<T> &data,
const T w,
const long i)
111 :
Point<T>(data, w) {
123 coordinates.resize(
d);
137 T &
operator[](
const std::size_t idx) {
return coordinates.at(idx); }
143 return coordinates.at(idx);
164 for (
int d = 0;
d < dimension; ++
d)
165 res += std::pow(coordinates.at(
d), nd);
166 return std::pow(res, 1.0 / nd);
176 if (d_p != dimension)
178 return dist(p).norm();
188 if (d_p != dimension)
190 return dist(p, 1).norm();
200 if (d_p != dimension)
203 for (
int d = 0;
d < dimension; ++
d)
204 d_v.push_back(p[
d] - coordinates.at(
d));
231 return std::abs( (coordinates.at(0) - A[0]) * n[0] +
232 (coordinates.at(1) - A[1]) * n[1] +
233 (coordinates.at(2) - A[2]) * n[2] );
244 for (
int d = 0;
d < dimension; ++
d) {
245 result[
d] = coordinates.at(
d) + rhs[
d];
259 for (
int d = 0;
d < dimension; ++
d) {
260 result[
d] = coordinates.at(
d) - rhs[
d];
273 for (
int d = 0;
d < dimension; ++
d) {
274 result += coordinates.at(
d) * rhs[
d];
284 for (
int d = 0;
d < dimension; ++
d) {
285 result[
d] = coordinates.at(
d) * rhs;
295 for (
int d = 0;
d < dimension; ++
d) {
296 result[
d] = coordinates.at(
d) / rhs;
306 if (rhs.
getDimension() != dimension && dimension != 3) {
310 for (
int d = 0;
d < dimension; ++
d) {
311 result[
d] = coordinates.at((
d + 1) % 3) * rhs[(
d + 2) % 3] -
312 coordinates.at((
d + 2) % 3) * rhs[(
d + 1) % 3];
342 return ((PAn * tAn) > 0);
369 std::vector<T> coordinates;
T operator*(const Point< T > &rhs) const
Point(const int d, const T *data, const T w)
Point(const std::vector< T > &data, const T w)
const T & operator[](const std::size_t idx) const
Point< T > operator+(const Point< T > &rhs) const
void set_id(const long i)
bool same_side_plane(const Point< T > &A, const Point< T > &B, const Point< T > &C, const Point< T > &P)
Point< T > dist(Point< T > &p)
Point< T > operator/(const T &rhs) const
Point< T > cross(const Point< T > &rhs) const
bool inTetrahedron(const Point< T > &A, const Point< T > &B, const Point< T > &C, const Point< T > &D)
T & operator[](const std::size_t idx)
Point< T > operator-(const Point< T > &rhs) const
Point(const int d, const T *data, const T w, const long i)
Point(const std::vector< T > &data, const T w, const long i)
Point(const int d, const T *data)
Point()
default constructor
void setDimension(const int d)
Point(const std::vector< T > &data)
void set_weight(const T w)
Point< T > operator*(const T &rhs) const
T dist_plane(const Point< T > &A, const Point< T > &B, const Point< T > &C)
std::ostream & operator<<(std::ostream &, const Point< T > &)
Point< T > operator*(const T &lhs, const Point< T > &rhs)
Exception to be used for missmatches in dimension for ALL::Point class.