35 template<
typename,
typename>
struct Frame;
41 template<
typename Valtype,
typename ValtypeT = Valtype>
65 ValtypeT tx, ValtypeT ty, ValtypeT tz,
66 ValtypeT nx, ValtypeT ny, ValtypeT nz ) noexcept;
68 const
Vector<ValtypeT>& tan,
69 const
Vector<ValtypeT>& nor ) noexcept;
71 const
Vector<ValtypeT>& nor ) noexcept;
73 const
Rotation<ValtypeT>& rot ) noexcept;
76 template<typename Valtype2>
89 template<typename Valtype2>
104 const Valtype*
ptr() const noexcept;
131 bool IsOrthoNormal( ValtypeT epsilon_length = 2*
std::numeric_limits<ValtypeT>::epsilon(), ValtypeT epsilon_angle = 2*
std::numeric_limits<ValtypeT>::epsilon() ) const noexcept;
182 Valtype epsilon_length =
std::numeric_limits<Valtype>::epsilon(),
183 ValtypeT epsilon_lengthT =
std::numeric_limits<ValtypeT>::epsilon() ) const noexcept;
187 template<typename Valtype,typename ValtypeT=Valtype,typename Valtype2=Valtype,typename ValtypeT2=Valtype>
191 template<typename Valtype,typename ValtypeT=Valtype,typename Valtype2=Valtype,typename ValtypeT2=Valtype>
199 template<typename Valtype,typename ValtypeT> constexpr
201 template<typename Valtype,typename ValtypeT> constexpr
206template<typename Valtype,typename ValtypeT> constexpr
208 Valtype x, Valtype y, Valtype z,
209 ValtypeT tx, ValtypeT ty, ValtypeT tz,
210 ValtypeT nx, ValtypeT ny, ValtypeT nz ) noexcept
216template<
typename Valtype,
typename ValtypeT>
constexpr
226template<
typename Valtype,
typename ValtypeT>
constexpr
235template<
typename Valtype,
typename ValtypeT>
244template<
typename Valtype,
typename ValtypeT>
constexpr
252template<
typename Valtype,
typename ValtypeT>
259template<
typename Valtype,
typename ValtypeT>
267template<
typename Valtype,
typename ValtypeT>
280template<
typename Valtype,
typename ValtypeT>
281template<
typename Valtype2>
289template<
typename Valtype,
typename ValtypeT>
290template<
typename Valtype2>
298template<
typename Valtype,
typename ValtypeT>
303template<
typename Valtype,
typename ValtypeT>
305 static_assert(
sizeof(Valtype) ==
sizeof(ValtypeT),
"Can not access a VectorBundle via pointer if the two types have different memory sizes.");
309template<
typename Valtype,
typename ValtypeT>
311 static_assert(
sizeof(Valtype) ==
sizeof(ValtypeT),
"Can not access a VectorBundle via pointer if the two types have different memory sizes.");
315template<
typename Valtype,
typename ValtypeT>
323template<
typename Valtype,
typename ValtypeT>
329 if(
N.Normalize() == 0 )
334 if(
N.Normalize() == 0 )
340 assert(
N.Length() != 0);
346template<
typename Valtype,
typename ValtypeT>
353template<
typename Valtype,
typename ValtypeT>
366 N = Ey<ValtypeT> - (Ey<ValtypeT> *
T) *
T;
368 N = Ex<ValtypeT> - (Ex<ValtypeT> *
T) *
T;
375template<
typename Valtype,
typename ValtypeT>
377 return T.IsNormal( _epsilon_length ) &&
378 N.IsNormal( _epsilon_length ) &&
379 std::abs(
T*
N ) <= _epsilon_angle;
382template<
typename Valtype,
typename ValtypeT>
388template<
typename Valtype,
typename ValtypeT>
390 P += p.x *
T + p.y *
N;
394template<
typename Valtype,
typename ValtypeT>
400template<
typename Valtype,
typename ValtypeT>
406template<
typename Valtype,
typename ValtypeT>
408 T.Rotate( nr, angle );
409 N.Rotate( nr, angle );
413template<
typename Valtype,
typename ValtypeT>
417 T.Rotate( r, angle );
418 N.Rotate( r, angle );
422template<
typename Valtype,
typename ValtypeT>
424 N.Rotate(
T, angle );
428template<
typename Valtype,
typename ValtypeT>
430 T.Rotate(
N, angle );
434template<
typename Valtype,
typename ValtypeT>
constexpr
436 return P.Equals( bundle.P, _epsilon_length ) &&
437 T.Equals( bundle.T, epsilon_lengthT ) &&
438 N.Equals( bundle.N, epsilon_lengthT );
441template<
typename Valtype,
typename ValtypeT,
typename Valtype2,
typename ValtypeT2>
443 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
444 static_assert(
sizeof(ValtypeT) ==
sizeof(ValtypeT2),
"Can not spatial_cast with different memory layout" );
449template<
typename Valtype,
typename ValtypeT,
typename Valtype2,
typename ValtypeT2>
451 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
452 static_assert(
sizeof(ValtypeT) ==
sizeof(ValtypeT2),
"Can not spatial_cast with different memory layout" );
456template<
typename Valtype,
typename ValtypeT>
constexpr
461template<
typename Valtype,
typename ValtypeT>
constexpr
463 return b1.P != b2.P ||
Rotation matrix.
Definition Matrix.h:607
The namespace provides classes and methods for spatial computations.
Definition Box.h:32
Frame< Valtype, ValtypeT > & spatial_cast(Frame< Valtype2, ValtypeT2 > &from) noexcept
Cast to Frame with different underlying value types.
Definition Frame.h:1062
A Frame ("TNBFrame") describes a location in 3d space and an orientation using a right handed coordin...
Definition Frame.h:52
Implements a 2D - position in cartesian coordinates.
Definition Position2D.h:45
Implements a 3D - position in cartesian coordinates.
Definition Position.h:46
Implements a tangential space bundle.
Definition VectorBundle2.h:43
VectorBundle2 & TransportTo(dim::Value< Dimension< 1, 0, 0 > > d) noexcept
Definition VectorBundle2.h:383
dim::Value< Dimension< 1, 0, 0 > > * ptr() noexcept
Definition VectorBundle2.h:304
Vector< ValtypeT > T
Tangent vector or x-axis.
Definition VectorBundle2.h:45
VectorBundle2 & OrthoNormalize() noexcept
Definition VectorBundle2.h:354
VectorBundle2 & Rotate(const Vector< dim::Value< Dimension< 0, 0, 0 > > > &nr, dim::Value< Dimension< 0, 0, 0 > > angle) noexcept
Definition VectorBundle2.h:407
VectorBundle2 & TransportNor(dim::Value< Dimension< 1, 0, 0 > > d) noexcept
Definition VectorBundle2.h:401
VectorBundle2 & Init() noexcept
Definition VectorBundle2.h:316
VectorBundle2 & TransportTan(dim::Value< Dimension< 1, 0, 0 > > d) noexcept
Definition VectorBundle2.h:395
bool IsOrthoNormal(dim::Value< Dimension< 0, 0, 0 > > epsilon_length=2 *std::numeric_limits< dim::Value< Dimension< 0, 0, 0 > > >::epsilon(), dim::Value< Dimension< 0, 0, 0 > > epsilon_angle=2 *std::numeric_limits< dim::Value< Dimension< 0, 0, 0 > > >::epsilon()) const noexcept
Definition VectorBundle2.h:376
constexpr bool Equals(const VectorBundle2 &bundle, dim::Value< Dimension< 1, 0, 0 > > epsilon_length=std::numeric_limits< dim::Value< Dimension< 1, 0, 0 > > >::epsilon(), dim::Value< Dimension< 0, 0, 0 > > epsilon_lengthT=std::numeric_limits< dim::Value< Dimension< 0, 0, 0 > > >::epsilon()) const noexcept
Definition VectorBundle2.h:435
constexpr VectorBundle2() noexcept=default
Does not initialize the members.
VectorBundle2 & Normalize() noexcept
Definition VectorBundle2.h:347
VectorBundle2 & RotateNor(dim::Value< Dimension< 0, 0, 0 > > angle) noexcept
Definition VectorBundle2.h:429
Vector< ValtypeT > N
Normal axis or y-axis.
Definition VectorBundle2.h:46
VectorBundle2 & RotateTan(dim::Value< Dimension< 0, 0, 0 > > angle) noexcept
Definition VectorBundle2.h:423
Position< Valtype > P
Base space postion.
Definition VectorBundle2.h:44
Implements a Vector bundle.
Definition VectorBundle.h:42
Implements a 3D - vector in cartesian coordinates.
Definition Vector.h:48
@ null
Vector with all parameters zeroed.
Definition Vector.h:58
@ ex
Unit vector in x-direction.
Definition Vector.h:59
@ ey
Unit vector in y-direction.
Definition Vector.h:60
auto Normalize() noexcept -> decltype(Valtype{}/Valtype{})
Normalizes the vector to length 1.
Definition Vector.h:487