Ocean
Ocean::VectorT2< T > Class Template Reference

This class implements a vector with two elements. More...

Inheritance diagram for Ocean::VectorT2< T >:

Public Types

typedef T Type
 Definition of the used data type. More...
 

Public Member Functions

 VectorT2 () noexcept
 Creates a new 2D vector with undefined elements. More...
 
 VectorT2 (const bool setToHomogeneous) noexcept
 Creates a new 2D vector. More...
 
 VectorT2 (const T x, const T y) noexcept
 Creates a new 2D vector with specified coordinates. More...
 
 VectorT2 (const T *valueArray) noexcept
 Creates a new 2D vector with a given array of elements. More...
 
 VectorT2 (const VectorT2< T > &vector) noexcept
 Copies a vector. More...
 
template<typename U >
 VectorT2 (const VectorT2< U > &vector) noexcept
 Copies a vector with different element data type than T. More...
 
cross (const VectorT2< T > &vector) const
 Returns the cross product of two 2D vectors. More...
 
VectorT2< T > perpendicular () const
 Returns a vector perpendicular to this vectors. More...
 
VectorT2< T > normalized () const
 Returns the normalized vector. More...
 
VectorT2< T > normalizedOrZero () const
 Returns the normalized vector. More...
 
VectorT2< T > normalizedOrValue (const VectorT2< T > &value) const
 Returns the normalized vector. More...
 
bool normalize ()
 Normalizes this vector. More...
 
length () const
 Returns the length of the vector. More...
 
sqr () const
 Returns the square of the vector length. More...
 
distance (const VectorT2< T > &right) const
 Returns the distance between this 2D position and a second 2D position. More...
 
sqrDistance (const VectorT2< T > &right) const
 Returns the square distance between this 2D position and a second 2D position. More...
 
angle (const VectorT2< T > &right) const
 Returns the angle between this vector and a second vectors. More...
 
bool isParallel (const VectorT2< T > &right, const T epsilon=NumericT< T >::eps()) const
 Returns whether two vectors are parallel. More...
 
bool isOrthogonal (const VectorT2< T > &right, const T epsilon=NumericT< T >::eps()) const
 Returns whether two vectors are orthogonal. More...
 
const T & x () const noexcept
 Returns the x value. More...
 
T & x () noexcept
 Returns the x value. More...
 
const T & y () const noexcept
 Returns the y value. More...
 
T & y () noexcept
 Returns the y value. More...
 
const T * data () const noexcept
 Returns an pointer to the vector elements. More...
 
T * data () noexcept
 Returns an pointer to the vector elements. More...
 
bool isNull () const
 Returns whether this vector is a null vector up to a small epsilon. More...
 
bool isUnit (const T eps=NumericT< T >::eps()) const
 Returns whether this vector is a unit vector (whether the vector has the length 1). More...
 
bool isEqual (const VectorT2< T > &vector, const T eps) const
 Returns whether two vectors are equal up to a specified epsilon. More...
 
VectorT2< T > & operator= (const VectorT2< T > &vector)
 Copy assigns a vector. More...
 
bool operator== (const VectorT2< T > &vector) const
 Returns whether two vectors are identical up to a small epsilon. More...
 
bool operator!= (const VectorT2< T > &vector) const
 Returns whether two vectors are not identical up to a small epsilon. More...
 
VectorT2< T > operator+ (const VectorT2< T > &vector) const
 Adds two vectors. More...
 
VectorT2< T > & operator+= (const VectorT2< T > &vector)
 Adds and assigns two vectors. More...
 
VectorT2< T > operator- (const VectorT2< T > &vector) const
 Subtracts two vectors. More...
 
VectorT2< T > & operator-= (const VectorT2< T > &vector)
 Subtracts and assigns two vectors. More...
 
VectorT2< T > operator- () const
 Returns the negated vector. More...
 
operator* (const VectorT2< T > &vector) const
 Returns the dot product of two vectors. More...
 
VectorT2< T > operator* (const T &value) const
 Multiplies this vector with a scalar. More...
 
VectorT2< T > & operator*= (const T &value)
 Multiplies and assigns this vector with a scalar. More...
 
VectorT2< T > operator/ (const T &value) const
 Divides this vector by a scalar. More...
 
VectorT2< T > & operator/= (const T &value)
 Divides and assigns this vector by a scalar. More...
 
bool operator< (const VectorT2< T > &vector) const
 Compares two vector objects and returns whether the left vector represents a smaller value than the right vector. More...
 
const T & operator[] (const unsigned int index) const noexcept
 Element access operator. More...
 
T & operator[] (const unsigned int index) noexcept
 Element access operator. More...
 
const T & operator() (const unsigned int index) const noexcept
 Element access operator. More...
 
T & operator() (const unsigned int index) noexcept
 Element access operator. More...
 
const T * operator() () const noexcept
 Access operator. More...
 
T * operator() () noexcept
 Access operator. More...
 
size_t operator() (const VectorT2< T > &vector) const
 Hash function. More...
 
std::vector< VectorT2< float > > vectors2vectors (std::vector< VectorT2< float >> &&vectors)
 
std::vector< VectorT2< double > > vectors2vectors (std::vector< VectorT2< double >> &&vectors)
 
std::vector< VectorT2< float > > vectors2vectors (const std::vector< VectorT2< float >> &vectors)
 
std::vector< VectorT2< double > > vectors2vectors (const std::vector< VectorT2< double >> &vectors)
 

Static Public Member Functions

template<typename U >
static std::vector< VectorT2< T > > vectors2vectors (std::vector< VectorT2< U >> &&vectors)
 Converts vectors with specific data type to vectors with different data type. More...
 
template<typename U >
static std::vector< VectorT2< T > > vectors2vectors (const std::vector< VectorT2< U >> &vectors)
 Converts vectors with specific data type to vectors with different data type. More...
 
template<typename U >
static std::vector< VectorT2< T > > vectors2vectors (const VectorT2< U > *vectors, const size_t size)
 Converts vectors with specific data type to vectors with different data type. More...
 

Protected Attributes

values_ [2]
 The two values of the vector, with element order x, y. More...
 

Detailed Description

template<typename T>
class Ocean::VectorT2< T >

This class implements a vector with two elements.

The element order is: (x, y).

Template Parameters
TData type of the vector elements.
See also
Vector2, VectorF2, VectorF3.

Member Typedef Documentation

◆ Type

template<typename T >
typedef T Ocean::VectorT2< T >::Type

Definition of the used data type.

Constructor & Destructor Documentation

◆ VectorT2() [1/6]

template<typename T >
Ocean::VectorT2< T >::VectorT2
inlinenoexcept

Creates a new 2D vector with undefined elements.

Beware: The elements are neither zero nor a specific value! This is useful in situations where VectorT2 objects are created (e.g, by a large array or vector) and their values are assigned in a function afterwards.

◆ VectorT2() [2/6]

template<typename T >
Ocean::VectorT2< T >::VectorT2 ( const bool  setToHomogeneous)
inlineexplicitnoexcept

Creates a new 2D vector.

Parameters
setToHomogeneousDetermines whether a homogeneous vector (0, 1) will be created, otherwise the vector is initialized with zeros

◆ VectorT2() [3/6]

template<typename T >
Ocean::VectorT2< T >::VectorT2 ( const T  x,
const T  y 
)
inlinenoexcept

Creates a new 2D vector with specified coordinates.

Parameters
xX value
yY value

◆ VectorT2() [4/6]

template<typename T >
Ocean::VectorT2< T >::VectorT2 ( const T *  valueArray)
inlineexplicitnoexcept

Creates a new 2D vector with a given array of elements.

Parameters
valueArrayArray with at least two elements

◆ VectorT2() [5/6]

template<typename T >
Ocean::VectorT2< T >::VectorT2 ( const VectorT2< T > &  vector)
inlinenoexcept

Copies a vector.

Parameters
vector2D vector that is copied

◆ VectorT2() [6/6]

template<typename T >
template<typename U >
Ocean::VectorT2< T >::VectorT2 ( const VectorT2< U > &  vector)
inlineexplicitnoexcept

Copies a vector with different element data type than T.

Parameters
vectorThe 2D vector to copy
Template Parameters
UThe element data type of the second vector

Member Function Documentation

◆ angle()

template<typename T >
T Ocean::VectorT2< T >::angle ( const VectorT2< T > &  right) const

Returns the angle between this vector and a second vectors.

Beware: This vector must not be zero.
Beware: This function does not throw an exception if one or both vectors are zero.
In case, the angle cannot be determined -1 will be returned.

Parameters
rightSecond vector, must not be zero
Returns
Angle between both vectors in radian, with range [0, PI], -1 in case of an error
See also
isNull().

◆ cross()

template<typename T >
T Ocean::VectorT2< T >::cross ( const VectorT2< T > &  vector) const
inline

Returns the cross product of two 2D vectors.

The cross product is the resulting z-component of a cross product between two 3D vectors having 0 as z-component.

Parameters
vectorRight vector
Returns
Cross product
See also
perpendicular().

◆ data() [1/2]

template<typename T >
const T * Ocean::VectorT2< T >::data
inlinenoexcept

Returns an pointer to the vector elements.

Returns
Pointer to elements

◆ data() [2/2]

template<typename T >
T * Ocean::VectorT2< T >::data
inlinenoexcept

Returns an pointer to the vector elements.

Returns
Pointer to elements

◆ distance()

template<typename T >
T Ocean::VectorT2< T >::distance ( const VectorT2< T > &  right) const
inline

Returns the distance between this 2D position and a second 2D position.

Parameters
rightSecond 2D position
Returns
Distance between the two points

◆ isEqual()

template<typename T >
bool Ocean::VectorT2< T >::isEqual ( const VectorT2< T > &  vector,
const T  eps 
) const
inline

Returns whether two vectors are equal up to a specified epsilon.

Parameters
vectorSecond vector
epsEpsilon to be used
Returns
True, if so

◆ isNull()

template<typename T >
bool Ocean::VectorT2< T >::isNull
inline

Returns whether this vector is a null vector up to a small epsilon.

Returns
True, if so

◆ isOrthogonal()

template<typename T >
bool Ocean::VectorT2< T >::isOrthogonal ( const VectorT2< T > &  right,
const T  epsilon = NumericT<T>::eps() 
) const

Returns whether two vectors are orthogonal.

A zero vector is not orthogonal.

Parameters
rightThe right vector
epsilonThe epsilon to be used, with range [0, infinity)
Returns
True, if so

◆ isParallel()

template<typename T >
bool Ocean::VectorT2< T >::isParallel ( const VectorT2< T > &  right,
const T  epsilon = NumericT<T>::eps() 
) const

Returns whether two vectors are parallel.

A zero vector is be parallel.

Parameters
rightThe right vector
epsilonThe epsilon to be used, with range [0, infinity)
Returns
True, if so

◆ isUnit()

template<typename T >
bool Ocean::VectorT2< T >::isUnit ( const T  eps = NumericT<T>::eps()) const
inline

Returns whether this vector is a unit vector (whether the vector has the length 1).

Parameters
epsEpsilon to be used, with range [0, infinity)
Returns
True, if so

◆ length()

template<typename T >
T Ocean::VectorT2< T >::length
inline

Returns the length of the vector.

Returns
Vector length

◆ normalize()

template<typename T >
bool Ocean::VectorT2< T >::normalize
inline

Normalizes this vector.

Returns
True, if the vector could be normalized

◆ normalized()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::normalized
inline

Returns the normalized vector.

Beware: This function does not throw an exception if this vector cannot be normalized.
Thus, ensure that this vector is not zero before calling this function.
Or even better, use different normalization functions like: normalizedOrZero(), normalizedOrValue(), or normalize().
In case, the vector cannot be normalized, an uninitialized vector will be returned (due to performance reasons).

Returns
This vector as unit vector (vector with length 1)
See also
normalizedOrZero(), normalizedOrValue(), normalize().

◆ normalizedOrValue()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::normalizedOrValue ( const VectorT2< T > &  value) const
inline

Returns the normalized vector.

If this vector cannot be normalized the given vector is returned.

Parameters
valueVector that will be returned if the vector cannot be normalized
Returns
Vector with length 1

◆ normalizedOrZero()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::normalizedOrZero
inline

Returns the normalized vector.

If this vector cannot be normalized the zero vector is returned.

Returns
Vector with length 1

◆ operator!=()

template<typename T >
bool Ocean::VectorT2< T >::operator!= ( const VectorT2< T > &  vector) const
inline

Returns whether two vectors are not identical up to a small epsilon.

Parameters
vectorRight vector
Returns
True, if so

◆ operator()() [1/5]

template<typename T >
const T * Ocean::VectorT2< T >::operator()
inlinenoexcept

Access operator.

Returns
Pointer to the elements

◆ operator()() [2/5]

template<typename T >
T * Ocean::VectorT2< T >::operator()
inlinenoexcept

Access operator.

Returns
Pointer to the elements

◆ operator()() [3/5]

template<typename T >
const T & Ocean::VectorT2< T >::operator() ( const unsigned int  index) const
inlinenoexcept

Element access operator.

Parameters
indexIndex of the element to access, with range [0, 1]
Returns
Element of the vector

◆ operator()() [4/5]

template<typename T >
T & Ocean::VectorT2< T >::operator() ( const unsigned int  index)
inlinenoexcept

Element access operator.

Parameters
indexIndex of the element to access, with range [0, 1]
Returns
Element of the vector

◆ operator()() [5/5]

template<typename T >
size_t Ocean::VectorT2< T >::operator() ( const VectorT2< T > &  vector) const
inline

Hash function.

Parameters
vectorThe vector for which the hash value will be determined
Returns
The resulting hash value

◆ operator*() [1/2]

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::operator* ( const T &  value) const
inline

Multiplies this vector with a scalar.

Parameters
valueScalar value
Returns
Resulting vector

◆ operator*() [2/2]

template<typename T >
T Ocean::VectorT2< T >::operator* ( const VectorT2< T > &  vector) const
inline

Returns the dot product of two vectors.

Parameters
vectorRight vector
Returns
Dot product

◆ operator*=()

template<typename T >
VectorT2< T > & Ocean::VectorT2< T >::operator*= ( const T &  value)
inline

Multiplies and assigns this vector with a scalar.

Parameters
valueScalar value
Returns
Reference to this vector

◆ operator+()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::operator+ ( const VectorT2< T > &  vector) const
inline

Adds two vectors.

Parameters
vectorRight vector
Returns
Sum vector

◆ operator+=()

template<typename T >
VectorT2< T > & Ocean::VectorT2< T >::operator+= ( const VectorT2< T > &  vector)
inline

Adds and assigns two vectors.

Parameters
vectorRight vector
Returns
Reference to this vector

◆ operator-() [1/2]

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::operator-
inline

Returns the negated vector.

Returns
Negated vector

◆ operator-() [2/2]

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::operator- ( const VectorT2< T > &  vector) const
inline

Subtracts two vectors.

Parameters
vectorRight vector
Returns
Difference vector

◆ operator-=()

template<typename T >
VectorT2< T > & Ocean::VectorT2< T >::operator-= ( const VectorT2< T > &  vector)
inline

Subtracts and assigns two vectors.

Parameters
vectorRight vector
Returns
Reference to this vector

◆ operator/()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::operator/ ( const T &  value) const
inline

Divides this vector by a scalar.

Beware: This function does not throw an exception if the given value is zero.
Thus, ensure that given value is not zero before calling this function.
In case, the given value is zero, the result is undefined.

Parameters
valueScalar value to be used as denominator, must not be zero
Returns
Resulting vector

◆ operator/=()

template<typename T >
VectorT2< T > & Ocean::VectorT2< T >::operator/= ( const T &  value)
inline

Divides and assigns this vector by a scalar.

Beware: This function does not throw an exception if the given value is zero.
Thus, ensure that given value is not zero before calling this function.
In case, the given value is zero, the result is undefined.

Parameters
valueScalar value to be used as denominator, must not be zero
Returns
Reference to this vector

◆ operator<()

template<typename T >
bool Ocean::VectorT2< T >::operator< ( const VectorT2< T > &  vector) const
inline

Compares two vector objects and returns whether the left vector represents a smaller value than the right vector.

First the first component of both vectors are compared, if these values are equal then the next components are compares and so on.

Parameters
vectorThe second vector to compare
Returns
True, if so

◆ operator=()

template<typename T >
VectorT2< T > & Ocean::VectorT2< T >::operator= ( const VectorT2< T > &  vector)
inline

Copy assigns a vector.

Parameters
vector2D vector that is copied

◆ operator==()

template<typename T >
bool Ocean::VectorT2< T >::operator== ( const VectorT2< T > &  vector) const
inline

Returns whether two vectors are identical up to a small epsilon.

Parameters
vectorRight vector
Returns
True, if so

◆ operator[]() [1/2]

template<typename T >
const T & Ocean::VectorT2< T >::operator[] ( const unsigned int  index) const
inlinenoexcept

Element access operator.

Parameters
indexIndex of the element to access, with range [0, 1]
Returns
Element of the vector

◆ operator[]() [2/2]

template<typename T >
T & Ocean::VectorT2< T >::operator[] ( const unsigned int  index)
inlinenoexcept

Element access operator.

Parameters
indexIndex of the element to access, with range [0, 1]
Returns
Element of the vector

◆ perpendicular()

template<typename T >
VectorT2< T > Ocean::VectorT2< T >::perpendicular
inline

Returns a vector perpendicular to this vectors.

The cross product between this vector and the resulting perpendicular vector will have a positive value.

Returns
Perpendicular vector with identical length as this vector
See also
cross().

◆ sqr()

template<typename T >
T Ocean::VectorT2< T >::sqr
inline

Returns the square of the vector length.

Returns
Square of vector length

◆ sqrDistance()

template<typename T >
T Ocean::VectorT2< T >::sqrDistance ( const VectorT2< T > &  right) const
inline

Returns the square distance between this 2D position and a second 2D position.

Parameters
rightSecond 2D position
Returns
Square distance between the two points

◆ vectors2vectors() [1/7]

std::vector< VectorT2< double > > Ocean::VectorT2< double >::vectors2vectors ( const std::vector< VectorT2< double >> &  vectors)
inline

◆ vectors2vectors() [2/7]

std::vector< VectorT2< float > > Ocean::VectorT2< float >::vectors2vectors ( const std::vector< VectorT2< float >> &  vectors)
inline

◆ vectors2vectors() [3/7]

template<typename T >
template<typename U >
std::vector< VectorT2< T > > Ocean::VectorT2< T >::vectors2vectors ( const std::vector< VectorT2< U >> &  vectors)
inlinestatic

Converts vectors with specific data type to vectors with different data type.

Parameters
vectorsThe vectors to convert
Returns
The converted vectors
Template Parameters
UThe element data type of the vectors to convert

◆ vectors2vectors() [4/7]

template<typename T >
template<typename U >
std::vector< VectorT2< T > > Ocean::VectorT2< T >::vectors2vectors ( const VectorT2< U > *  vectors,
const size_t  size 
)
inlinestatic

Converts vectors with specific data type to vectors with different data type.

Parameters
vectorsThe vectors to convert
sizeThe number of vector to convert
Returns
The converted vectors
Template Parameters
UThe element data type of the vectors to convert

◆ vectors2vectors() [5/7]

std::vector< VectorT2< double > > Ocean::VectorT2< double >::vectors2vectors ( std::vector< VectorT2< double >> &&  vectors)
inline

◆ vectors2vectors() [6/7]

std::vector< VectorT2< float > > Ocean::VectorT2< float >::vectors2vectors ( std::vector< VectorT2< float >> &&  vectors)
inline

◆ vectors2vectors() [7/7]

template<typename T >
template<typename U >
std::vector< VectorT2< T > > Ocean::VectorT2< T >::vectors2vectors ( std::vector< VectorT2< U >> &&  vectors)
inlinestatic

Converts vectors with specific data type to vectors with different data type.

Parameters
vectorsThe vectors to convert
Returns
The converted vectors
Template Parameters
UThe element data type of the vectors to convert

◆ x() [1/2]

template<typename T >
const T & Ocean::VectorT2< T >::x
inlinenoexcept

Returns the x value.

Returns
X value

◆ x() [2/2]

template<typename T >
T & Ocean::VectorT2< T >::x
inlinenoexcept

Returns the x value.

Returns
X value

◆ y() [1/2]

template<typename T >
const T & Ocean::VectorT2< T >::y
inlinenoexcept

Returns the y value.

Returns
Y value

◆ y() [2/2]

template<typename T >
T & Ocean::VectorT2< T >::y
inlinenoexcept

Returns the y value.

Returns
Y value

Field Documentation

◆ values_

template<typename T >
T Ocean::VectorT2< T >::values_[2]
protected

The two values of the vector, with element order x, y.


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