29#include "common/Helpers.h"
34 template<
typename>
struct Vector;
44 template<
typename Valtype>
47 typedef Valtype value_type;
64 constexpr
Position( Valtype
x, Valtype
y, Valtype
z ) noexcept;
66 template<typename Valtype2>
69 template<typename Valtype2>
71 template<typename Valtype2>
72 explicit
Position( const Valtype2* pVal ) noexcept;
83 template<typename Valtype2>
84 Position& operator=( const Valtype2* pVal ) noexcept;
91 const Valtype& operator[](
size_t index ) const;
93 Valtype& operator[](
size_t index );
98 Valtype*
ptr() noexcept;
102 const Valtype*
ptr() const noexcept;
116 template<typename Valtype2>
124 template<typename Valtype2>
133 constexpr
bool Equals( const
Position& p, Valtype epsilon = Valtype{0} )
const noexcept;
142 template<
typename Valtype>
146 template<
typename Valtype,
typename Valtype2>
147 Position<Valtype>&
spatial_cast( Position<Valtype2>& from )
noexcept;
150 template<
typename Valtype,
typename Valtype2>
151 const Position<Valtype>&
spatial_cast(
const Position<Valtype2>& from )
noexcept;
168 template<
typename Valtype>
constexpr
170 template<
typename Valtype>
constexpr
172 template<
typename Valtype>
constexpr
174 template<
typename Valtype>
176 template<
typename Valtype>
178 template<
typename Valtype>
180 template<
typename Valtype>
constexpr
182 template<
typename Valtype>
constexpr
184 template<
typename Valtype>
constexpr
186 template<
typename Valtype>
constexpr
188 template<
typename Valtype>
190 template<
typename Valtype>
192 template<
typename Valtype>
constexpr
194 template<
typename Valtype>
constexpr
196 template<
typename Valtype>
constexpr
198 template<
typename Valtype>
constexpr
200 template<
typename Valtype,
typename Valtype2>
constexpr
202 template<
typename Valtype,
typename Valtype2>
constexpr
204 template<
typename Valtype,
typename Valtype2>
206 template<
typename Valtype>
208 template<
typename Valtype>
constexpr
210 template<
typename Valtype>
212 template<
typename Valtype>
constexpr
214 template<
typename Valtype,
typename Valtype2>
constexpr
216 template<
typename Valtype>
constexpr
218 template<
typename Valtype,
typename Valtype2>
220 template<
typename Valtype>
constexpr
222 template<
typename Valtype>
constexpr
227 template<
typename Valtype>
233template<
typename Valtype>
238template<
typename Valtype>
239template<
typename Valtype2>
241 :
x{b.P.x}, y{b.P.y}, z{b.P.z}
244template<
typename Valtype>
246 :
x{p.x}, y{p.y}, z{0}
249template<
typename Valtype>
250template<
typename Valtype2>
252 :
x{p.x/p.w}, y{p.y/p.w}, z{p.z/p.w}
255template<
typename Valtype>
256template<
typename Valtype2>
258 :
x{Valtype{
static_cast<Valtype
>(pVal[0])}},
259 y{Valtype{
static_cast<Valtype
>(pVal[1])}},
260 z{Valtype{
static_cast<Valtype
>(pVal[2])}}
263template<
typename Valtype>
265 x = p2d.x; y = p2d.y;
269template<
typename Valtype>
270template<
typename Valtype2>
271inline Position<Valtype>& Position<Valtype>::operator=(
const Valtype2* pVal )
noexcept{
272 x = Valtype{pVal[0]};
273 y = Valtype{pVal[1]};
274 z = Valtype{pVal[2]};
278template<
typename Valtype>
279template<
typename Valtype2>
283 Valtype2 angle = r.T.Normalize();
285 return Rotate( r, angle );
288template<
typename Valtype>
289template<
typename Valtype2>
295 *
this = axis.P + Dp +
cos(angle) * Do + axis.T % Do *
sin(angle);
299template<
typename Valtype>
300inline const Valtype& Position<Valtype>::operator[](
size_t index )
const{
304 throw std::out_of_range(
"invalid Position subscript" );
307template<
typename Valtype>
308inline Valtype& Position<Valtype>::operator[](
size_t index ){
312 throw std::out_of_range(
"invalid Position subscript" );
315template<
typename Valtype>
320template<
typename Valtype>
325template<
typename Valtype>
331template<
typename Valtype>
339template<
typename Valtype>
342 return d*d <= epsilon_*epsilon_;
345template<
typename Valtype>
353template<
typename Valtype,
typename Valtype2>
355 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
359template<
typename Valtype,
typename Valtype2>
361 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
365template<
typename Valtype>
constexpr
372template<
typename Valtype>
378template<
typename Valtype>
constexpr
380 return { p1.x - p2.x,
385template<
typename Valtype>
constexpr
392template<
typename Valtype>
400template<
typename Valtype>
constexpr
406template<
typename Valtype>
constexpr
411template<
typename Valtype,
typename Valtype2>
constexpr
413 static_assert( !std::is_integral<Valtype>::value,
"Possible data loss on integral values, proper implementation provided for int only!" );
419template<
typename Valtype,
typename Valtype2>
constexpr
421 static_assert( !std::is_integral<Valtype>::value,
"Possible data loss on integral values, proper implementation provided for int only!" );
425template<
typename Valtype>
constexpr
427 return {
static_cast<int>(
static_cast<Valtype
>(p.x) * f),
428 static_cast<int>(
static_cast<Valtype
>(p.y) * f),
429 static_cast<int>(
static_cast<Valtype
>(p.z) * f) };
432template<
typename Valtype>
constexpr
437template<
typename Valtype,
typename Valtype2>
439 static_assert( !std::is_integral<Valtype>::value,
"Possible data loss on integral values, proper implementation provided for int only!" );
446template<
typename Valtype>
447inline Position<int>&
operator*=( Position<int>& p, Valtype f )
noexcept{
448 p.x =
static_cast<int>(
static_cast<Valtype
>(p.x) * f);
449 p.y =
static_cast<int>(
static_cast<Valtype
>(p.y) * f);
450 p.z =
static_cast<int>(
static_cast<Valtype
>(p.z) * f);
454template<
typename Valtype,
typename Valtype2>
constexpr
456 static_assert( !std::is_integral<Valtype>::value,
"Possible data loss on integral values, proper implementation provided for int only!" );
462template<
typename Valtype>
constexpr
464 return {
static_cast<int>(
static_cast<Valtype
>(p.x) / f),
465 static_cast<int>(
static_cast<Valtype
>(p.y) / f),
466 static_cast<int>(
static_cast<Valtype
>(p.z) / f) };
469template<
typename Valtype,
typename Valtype2>
471 static_assert( !std::is_integral<Valtype>::value,
"Possible data loss on integral values, proper implementation provided for int only!" );
478template<
typename Valtype>
constexpr
479inline Position<int>& operator/=( Position<int>& p, Valtype f )
noexcept{
480 p.x =
static_cast<int>(
static_cast<Valtype
>(p.x) / f);
481 p.y =
static_cast<int>(
static_cast<Valtype
>(p.y) / f);
482 p.z =
static_cast<int>(
static_cast<Valtype
>(p.z) / f);
486template<
typename Valtype>
constexpr
488 return (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z);
491template<
typename Valtype>
constexpr
T Round(T value, int toDigit) noexcept
Rounding of floating point number to a certain digit aftzer the point.
Definition Helpers.h:140
constexpr Value< Dimension< 0, 0, 0 > > cos(Value< Dimension< 0, 0, 0 > > a) noexcept
Dimensionated Values math function.
Definition DimensionedValues.h:698
constexpr Value< Dimension< 0, 0, 0 > > sin(Value< Dimension< 0, 0, 0 > > a) noexcept
Dimensionated Values math function.
Definition DimensionedValues.h:694
The namespace provides classes and methods for spatial computations.
Definition Box.h:32
Position< Valtype2 > operator*(const Frame< Valtype1, ValtypeT1 > &frame, const Position< Valtype2 > &p) noexcept
Frame operator.
Definition Frame.h:1089
Position< Valtype > & operator%=(const Position< Valtype > &, const Position< Valtype > &)=delete
Position operator.
Position< Valtype > & operator+=(Position< Valtype > &, const Position< Valtype > &)=delete
Position operator.
constexpr Position< Valtype > operator%(const Position< Valtype > &, const Position< Valtype > &)=delete
Position operator.
Position< Valtype > & operator-=(Position< Valtype > &, const Position< Valtype > &)=delete
Position operator.
Frame< Valtype2, ValtypeT2 > & operator*=(Frame< Valtype1, ValtypeT1 > &frame, const Frame< Valtype2, ValtypeT2 > &f) noexcept
right side multiplication of f to frame.
Definition Frame.h:1131
Frame< Valtype, ValtypeT > & spatial_cast(Frame< Valtype2, ValtypeT2 > &from) noexcept
Cast to Frame with different underlying value types.
Definition Frame.h:1062
constexpr Position< Valtype > Origin3D
Origin of coordinate system.
Definition Position.h:143
constexpr Valtype operator/(const Position< Valtype > &, const Position< Valtype > &)=delete
Position operator.
Implements a 2D - position in cartesian coordinates.
Definition Position2D.h:45
Implements a 4D - position in homogenous coordinates.
Definition PositionH.h:41
Implements a 3D - position in cartesian coordinates.
Definition Position.h:46
Position & Round(int toDigit) noexcept
Rounds the positions values to a certain digit after the point.
Definition Position.h:346
Position & Init() noexcept
Definition Position.h:326
Valtype y
cartesian y coordinate.
Definition Position.h:50
Valtype z
cartesian z coordinate.
Definition Position.h:51
Position & Rotate(const VectorBundle< Valtype, Valtype2 > &axis) noexcept
Rotates a position by axis (length of axis.T make angle in radints).
constexpr Position() noexcept=default
Does not initialize the members.
dim::Value< Dimension< 1, 0, 0 > > * ptr() noexcept
Definition Position.h:316
constexpr bool Equals(const Position &p, dim::Value< Dimension< 1, 0, 0 > > epsilon=dim::Value< Dimension< 1, 0, 0 > >{0}) const noexcept
Definition Position.h:340
Valtype x
cartesian x coordinate.
Definition Position.h:49
Position & Transport(const Vector< dim::Value< Dimension< 1, 0, 0 > > > &v) noexcept
Definition Position.h:332
Implements a Vector bundle.
Definition VectorBundle.h:42
Implements a 3D - vector in cartesian coordinates.
Definition Vector.h:48