35 template<
typename,
typename>
struct Frame;
40 template<
typename Valtype,
typename ValtypeT = Valtype>
62 const
Vector<ValtypeT>& tan ) noexcept;
64 ValtypeT dx, ValtypeT dy, ValtypeT dz ) noexcept;
67 template<typename Valtype2>
77 template<typename Valtype2>
78 VectorBundle& operator=( const Valtype2* pVal ) noexcept;
83 Valtype*
ptr() noexcept;
87 const Valtype*
ptr() const noexcept;
129 Valtype epsilon_length =
std::numeric_limits<Valtype>::epsilon(),
130 ValtypeT epsilon_lengthT =
std::numeric_limits<ValtypeT>::epsilon() ) const noexcept;
134 template<typename Valtype,typename ValtypeT = Valtype>
138 template<typename Valtype,typename ValtypeT=Valtype,typename Valtype2=Valtype,typename ValtypeT2=Valtype>
142 template<typename Valtype,typename ValtypeT=Valtype,typename Valtype2=Valtype,typename ValtypeT2=Valtype>
150 template<typename Valtype,typename ValtypeT> constexpr
152 template<typename Valtype,typename ValtypeT> constexpr
159 template<typename Valtype,typename ValtypeT = Valtype>
163template<typename Valtype,typename ValtypeT> constexpr
169template<
typename Valtype,
typename ValtypeT>
constexpr
177template<
typename Valtype,
typename ValtypeT>
constexpr
179 Valtype x, Valtype y, Valtype z,
180 ValtypeT dx, ValtypeT dy, ValtypeT dz ) noexcept
185template<
typename Valtype,
typename ValtypeT>
191template<
typename Valtype,
typename ValtypeT>
constexpr
197template<
typename Valtype,
typename ValtypeT>
198template<
typename Valtype2>
205template<
typename Valtype,
typename ValtypeT>
206template<
typename Valtype2>
213template<
typename Valtype,
typename ValtypeT>
220template<
typename Valtype,
typename ValtypeT>
222 static_assert(
sizeof(Valtype) ==
sizeof(ValtypeT),
"Can not access a VectorBundle via pointer if the two types have different memory sizes." );
226template<
typename Valtype,
typename ValtypeT>
228 static_assert(
sizeof(Valtype) ==
sizeof(ValtypeT),
"Can not access a VectorBundle via pointer if the two types have different memory sizes.");
232template<
typename Valtype,
typename ValtypeT>
239template<
typename Valtype,
typename ValtypeT>
246template<
typename Valtype,
typename ValtypeT>
252template<
typename Valtype,
typename ValtypeT>
258template<
typename Valtype,
typename ValtypeT>
260 T.Rotate( nr, angle );
264template<
typename Valtype,
typename ValtypeT>
270template<
typename Valtype,
typename ValtypeT>
constexpr
272 return P.Equals( bundle.P, epsilon_length_ ) &&
273 T.Equals( bundle.T, epsilon_lengthT );
276template<
typename Valtype,
typename ValtypeT,
typename Valtype2,
typename ValtypeT2>
278 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
279 static_assert(
sizeof(ValtypeT) ==
sizeof(ValtypeT2),
"Can not spatial_cast with different memory layout" );
283template<
typename Valtype,
typename ValtypeT,
typename Valtype2,
typename ValtypeT2>
285 static_assert(
sizeof(Valtype) ==
sizeof(Valtype2),
"Can not spatial_cast with different memory layout" );
286 static_assert(
sizeof(ValtypeT) ==
sizeof(ValtypeT2),
"Can not spatial_cast with different memory layout" );
290template<
typename Valtype,
typename ValtypeT>
constexpr
295template<
typename Valtype,
typename ValtypeT>
constexpr
304template<
typename Valtype,
typename ValtypeT>
318 ValtypeT n1n2 = n1 * n2;
320 if( n1n2 == ValtypeT{1} )
321 return { b1.P, D - D*n1*n1 };
323 Valtype s1 = D*(n1 - n2*n1n2) / (1 - n1n2*n1n2);
324 Valtype s2 = D*(n1*n1n2 - n2) / (1 - n1n2*n1n2);
326 return { b1.P + s1*n1, D + s2*n2 - s1*n1 };
The namespace provides classes and methods for spatial computations.
Definition Box.h:32
VectorBundle< Valtype, ValtypeT > VectorBundle1
Different name for VectorBundle.
Definition VectorBundle.h:135
auto Normalize(const Frame< Valtype, ValtypeT > &f) noexcept -> std::pair< Vector< ValtypeT >, Frame< Valtype, decltype(ValtypeT{}/ValtypeT{})> >
Outer normalizing.
Definition Frame.h:1144
Frame< Valtype, ValtypeT > & spatial_cast(Frame< Valtype2, ValtypeT2 > &from) noexcept
Cast to Frame with different underlying value types.
Definition Frame.h:1062
VectorBundle1< Valtype, Valtype > Distance(const VectorBundle1< Valtype, ValtypeT > &b1, const VectorBundle1< Valtype, ValtypeT > &b2) noexcept
Definition VectorBundle.h:305
A Frame ("TNBFrame") describes a location in 3d space and an orientation using a right handed coordin...
Definition Frame.h:52
Implements a 3D - position in cartesian coordinates.
Definition Position.h:46
Implements a tangential space bundle.
Definition VectorBundle2.h:43
Implements a Vector bundle.
Definition VectorBundle.h:42
VectorBundle & TransportBy(const Vector< Valtype > &v) noexcept
VectorBundle & Init() noexcept
constexpr bool Equals(const VectorBundle &bundle, Valtype epsilon_length=std::numeric_limits< Valtype >::epsilon(), ValtypeT epsilon_lengthT=std::numeric_limits< ValtypeT >::epsilon()) const noexcept
constexpr VectorBundle() noexcept=default
Does not initialize the members.
VectorBundle & Rotate(const Vector< Valtype > &nr, Valtype angle) noexcept
Position< Valtype > P
Definition VectorBundle.h:43
VectorBundle & TransportTo(Valtype d) noexcept
Vector< ValtypeT > T
Definition VectorBundle.h:44
Implements a 3D - vector in cartesian coordinates.
Definition Vector.h:48
@ ex
Unit vector in x-direction.
Definition Vector.h:59