OpenVolumeMesh
Loading...
Searching...
No Matches
OpenVolumeMesh::Geometry::VectorT< Scalar, DIM > Class Template Referenceabstract

Public Types

typedef Scalar value_type
 the type of the scalar used in this template
typedef VectorT< Scalar, DIM > vector_type
 type of this vector

Public Member Functions

constexpr VectorT ()
 default constructor creates uninitialized values.
 VectorT (const Scalar &v)
template<typename ... T, typename = typename std::enable_if<sizeof...(T) == DIM>::type, typename = typename std::enable_if< are_convertible_to<Scalar, T...>::value>::type>
constexpr VectorT (T... vs)
 VectorT (const VectorT &rhs)=default
 VectorT (VectorT &&rhs)=default
VectorToperator= (const VectorT &rhs)=default
VectorToperator= (VectorT &&rhs)=default
template<typename S = Scalar, int D = DIM>
auto homogenized () const -> typename std::enable_if< D==4, VectorT< decltype(std::declval< S >()/std::declval< S >()), DIM > >::type
template<typename Iterator, typename = decltype( *std::declval<Iterator&>(), void(), ++std::declval<Iterator&>(), void())>
 VectorT (Iterator it)
 construct from a value array or any other iterator
template<typename otherScalarType, typename = typename std::enable_if< std::is_convertible<otherScalarType, Scalar>::value>>
 VectorT (const VectorT< otherScalarType, DIM > &_rhs)
 copy & cast constructor (explicit)
template<typename OtherScalar, typename = typename std::enable_if< std::is_convertible<OtherScalar, Scalar>::value>>
vector_typeoperator= (const VectorT< OtherScalar, DIM > &_rhs)
 cast from vector with a different scalar type
Scalar * data ()
 access to Scalar array
const Scalar * data () const
 access to const Scalar array
Scalar & operator[] (size_t _i)
 get i'th element read-write
const Scalar & operator[] (size_t _i) const
 get i'th element read-only
bool operator== (const vector_type &_rhs) const
 component-wise comparison
bool operator!= (const vector_type &_rhs) const
 component-wise comparison
template<typename OtherScalar>
auto operator*= (const OtherScalar &_s) -> typename std::enable_if< std::is_convertible< decltype(this->values_[0] *_s), Scalar >::value, VectorT< Scalar, DIM > & >::type
 component-wise self-multiplication with scalar
template<typename OtherScalar>
auto operator/= (const OtherScalar &_s) -> typename std::enable_if< std::is_convertible< decltype(this->values_[0]/_s), Scalar >::value, VectorT< Scalar, DIM > & >::type
 component-wise self-division by scalar
template<typename OtherScalar>
std::enable_if< std::is_convertible< decltype(std::declval< Scalar >() *std::declval< OtherScalar >()), Scalar >::value, VectorT< Scalar, DIM > >::type operator* (const OtherScalar &_s) const
 component-wise multiplication with scalar
template<typename OtherScalar>
std::enable_if< std::is_convertible< decltype(std::declval< Scalar >()/std::declval< OtherScalar >()), Scalar >::value, VectorT< Scalar, DIM > >::type operator/ (const OtherScalar &_s) const
 component-wise division by with scalar
template<typename OtherScalar>
auto operator*= (const VectorT< OtherScalar, DIM > &_rhs) -> typename std::enable_if< sizeof(decltype(this->values_[0] **_rhs.data())) >=0
 component-wise self-multiplication
template<typename OtherScalar>
auto operator/= (const VectorT< OtherScalar, DIM > &_rhs) -> typename std::enable_if< sizeof(decltype(this->values_[0]/*_rhs.data())) >=0
 component-wise self-division
template<typename OtherScalar>
auto operator-= (const VectorT< OtherScalar, DIM > &_rhs) -> typename std::enable_if< sizeof(decltype(this->values_[0] - *_rhs.data())) >=0
 vector difference from this
template<typename OtherScalar>
auto operator+= (const VectorT< OtherScalar, DIM > &_rhs) -> typename std::enable_if< sizeof(decltype(this->values_[0]+ *_rhs.data())) >=0
 vector self-addition
template<typename OtherScalar>
auto operator* (const VectorT< OtherScalar, DIM > &_rhs) const -> typename std::enable_if< sizeof(decltype(this->values_[0] **_rhs.data())) >=0
 component-wise vector multiplication
template<typename OtherScalar>
auto operator/ (const VectorT< OtherScalar, DIM > &_rhs) const -> typename std::enable_if< sizeof(decltype(this->values_[0]/*_rhs.data())) >=0
 component-wise vector division
template<typename OtherScalar>
auto operator+ (const VectorT< OtherScalar, DIM > &_rhs) const -> typename std::enable_if< sizeof(decltype(this->values_[0]+ *_rhs.data())) >=0
 component-wise vector addition
template<typename OtherScalar>
auto operator- (const VectorT< OtherScalar, DIM > &_rhs) const -> typename std::enable_if< sizeof(decltype(this->values_[0] - *_rhs.data())) >=0
 component-wise vector difference
vector_type operator- (void) const
 unary minus
template<typename OtherScalar>
auto operator% (const VectorT< OtherScalar, DIM > &_rhs) const -> typename std::enable_if< DIM==3, VectorT< decltype(this->values_[0] *_rhs[0] - this->values_[0] *_rhs[0]), DIM > >::type
template<typename OtherScalar>
auto operator| (const VectorT< OtherScalar, DIM > &_rhs) const -> decltype(*this->data() **_rhs.data())
Euclidean norm calculations
template<typename S = Scalar>
decltype(std::declval< S >() *std::declval< S >()) sqrnorm () const
 compute squared euclidean norm
template<typename S = Scalar>
auto norm () const -> decltype(std::sqrt(std::declval< VectorT< S, DIM > >().sqrnorm()))
 compute euclidean norm
template<typename S = Scalar>
auto length () const -> decltype(std::declval< VectorT< S, DIM > >().norm())
template<typename S = Scalar>
auto normalize () -> decltype(*this/=std::declval< VectorT< S, DIM > >().norm())
template<typename S = Scalar>
auto normalized () const -> decltype(*this/std::declval< VectorT< S, DIM > >().norm())
template<typename S = Scalar>
std::enable_if< sizeof(decltype(static_cast< S >(0), std::declval< VectorT< S, DIM > >().norm()))>=0, vector_type & >::type normalize_cond ()
Non-Euclidean norm calculations
Scalar l1_norm () const
 compute L1 (Manhattan) norm
Scalar l8_norm () const
 compute l8_norm

Static Public Member Functions

static constexpr int dim ()
 returns dimension of the vector (deprecated)
static constexpr size_t size ()
 returns dimension of the vector

Static Public Attributes

static constexpr const size_t size_ = DIM

Component iterators

using iterator = typename container::iterator
using const_iterator = typename container::const_iterator
using reverse_iterator = typename container::reverse_iterator
using const_reverse_iterator = typename container::const_reverse_iterator
iterator begin () noexcept
const_iterator begin () const noexcept
const_iterator cbegin () const noexcept
iterator end () noexcept
const_iterator end () const noexcept
const_iterator cend () const noexcept
reverse_iterator rbegin () noexcept
const_reverse_iterator rbegin () const noexcept
const_reverse_iterator crbegin () const noexcept
reverse_iterator rend () noexcept
const_reverse_iterator rend () const noexcept
const_reverse_iterator crend () const noexcept

Minimum maximum and mean

static vector_type vectorized (const Scalar &_s)
 store the same value in each component
Scalar max () const
 return the maximal component
Scalar max_abs () const
 return the maximal absolute component
Scalar min () const
 return the minimal component
Scalar min_abs () const
 return the minimal absolute component
Scalar mean () const
 return arithmetic mean
Scalar mean_abs () const
 return absolute arithmetic mean
vector_typeminimize (const vector_type &_rhs)
 minimize values: same as *this = min(*this, _rhs), but faster
bool minimized (const vector_type &_rhs)
 minimize values and signalize coordinate minimization
vector_typemaximize (const vector_type &_rhs)
 maximize values: same as *this = max(*this, _rhs), but faster
bool maximized (const vector_type &_rhs)
 maximize values and signalize coordinate maximization
vector_type min (const vector_type &_rhs) const
 component-wise min
vector_type max (const vector_type &_rhs) const
 component-wise max
template<typename Functor>
vector_type apply (const Functor &_func) const
 component-wise apply function object with Scalar operator()(Scalar).
vector_typevectorize (const Scalar &_s)
 store the same value in each component (e.g. to clear all entries)
bool operator< (const vector_type &_rhs) const
 lexicographical comparison
void swap (VectorT &_other) noexcept(noexcept(std::swap(values_, _other.values_)))
 swap with another vector

Constructor & Destructor Documentation

◆ VectorT()

template<typename Scalar, int DIM>
OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::VectorT ( const Scalar & v)
inlineexplicit

Creates a vector with all components set to v.

Member Function Documentation

◆ homogenized()

template<typename Scalar, int DIM>
template<typename S = Scalar, int D = DIM>
auto OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::homogenized ( ) const -> typename std::enable_if< D==4, VectorT< decltype(std::declval< S >()/std::declval< S >()), DIM > >::type
inline

Only for 4-component vectors with division operator on their Scalar: Dehomogenization.

◆ normalize()

template<typename Scalar, int DIM>
template<typename S = Scalar>
auto OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::normalize ( ) -> decltype(*this/=std::declval< VectorT< S, DIM > >().norm())
inline

normalize vector, return normalized vector

◆ normalize_cond()

template<typename Scalar, int DIM>
template<typename S = Scalar>
std::enable_if< sizeof(decltype(static_cast< S >(0), std::declval< VectorT< S, DIM > >().norm()))>=0, vector_type & >::type OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::normalize_cond ( )
inline

normalize vector, return normalized vector and avoids div by zero

◆ normalized()

template<typename Scalar, int DIM>
template<typename S = Scalar>
auto OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::normalized ( ) const -> decltype(*this/std::declval< VectorT< S, DIM > >().norm())
inline

return normalized vector

◆ operator%()

template<typename Scalar, int DIM>
template<typename OtherScalar>
auto OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::operator% ( const VectorT< OtherScalar, DIM > & _rhs) const -> typename std::enable_if< DIM==3, VectorT< decltype(this->values_[0] *_rhs[0] - this->values_[0] *_rhs[0]), DIM > >::type
inline

cross product: only defined for Vec3* as specialization

See also
OpenVolumeMesh::cross

◆ operator|()

template<typename Scalar, int DIM>
template<typename OtherScalar>
auto OpenVolumeMesh::Geometry::VectorT< Scalar, DIM >::operator| ( const VectorT< OtherScalar, DIM > & _rhs) const -> decltype(*this->data() **_rhs.data())
inline

compute scalar product

See also
OpenVolumeMesh::dot

The documentation for this class was generated from the following file: