Ocean
|
This class implements a vector with two elements. More...
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... | |
T | 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... | |
T | length () const |
Returns the length of the vector. More... | |
T | sqr () const |
Returns the square of the vector length. More... | |
T | distance (const VectorT2< T > &right) const |
Returns the distance between this 2D position and a second 2D position. More... | |
T | sqrDistance (const VectorT2< T > &right) const |
Returns the square distance between this 2D position and a second 2D position. More... | |
T | 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... | |
T | 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 | |
T | values_ [2] |
The two values of the vector, with element order x, y. More... | |
This class implements a vector with two elements.
The element order is: (x, y).
T | Data type of the vector elements. |
typedef T Ocean::VectorT2< T >::Type |
Definition of the used data type.
|
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.
|
inlineexplicitnoexcept |
Creates a new 2D vector.
setToHomogeneous | Determines whether a homogeneous vector (0, 1) will be created, otherwise the vector is initialized with zeros |
|
inlinenoexcept |
Creates a new 2D vector with specified coordinates.
x | X value |
y | Y value |
|
inlineexplicitnoexcept |
Creates a new 2D vector with a given array of elements.
valueArray | Array with at least two elements |
|
inlinenoexcept |
Copies a vector.
vector | 2D vector that is copied |
|
inlineexplicitnoexcept |
Copies a vector with different element data type than T.
vector | The 2D vector to copy |
U | The element data type of the second vector |
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.
right | Second vector, must not be zero |
|
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.
vector | Right vector |
|
inlinenoexcept |
Returns an pointer to the vector elements.
|
inlinenoexcept |
Returns an pointer to the vector elements.
|
inline |
Returns the distance between this 2D position and a second 2D position.
right | Second 2D position |
|
inline |
Returns whether two vectors are equal up to a specified epsilon.
vector | Second vector |
eps | Epsilon to be used |
|
inline |
Returns whether this vector is a null vector up to a small epsilon.
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.
right | The right vector |
epsilon | The epsilon to be used, with range [0, infinity) |
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.
right | The right vector |
epsilon | The epsilon to be used, with range [0, infinity) |
|
inline |
Returns whether this vector is a unit vector (whether the vector has the length 1).
eps | Epsilon to be used, with range [0, infinity) |
|
inline |
Returns the length of the vector.
|
inline |
Normalizes this vector.
|
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).
|
inline |
Returns the normalized vector.
If this vector cannot be normalized the given vector is returned.
value | Vector that will be returned if the vector cannot be normalized |
|
inline |
Returns the normalized vector.
If this vector cannot be normalized the zero vector is returned.
|
inline |
Returns whether two vectors are not identical up to a small epsilon.
vector | Right vector |
|
inlinenoexcept |
Access operator.
|
inlinenoexcept |
Access operator.
|
inlinenoexcept |
Element access operator.
index | Index of the element to access, with range [0, 1] |
|
inlinenoexcept |
Element access operator.
index | Index of the element to access, with range [0, 1] |
|
inline |
Hash function.
vector | The vector for which the hash value will be determined |
|
inline |
Multiplies this vector with a scalar.
value | Scalar value |
|
inline |
Returns the dot product of two vectors.
vector | Right vector |
|
inline |
Multiplies and assigns this vector with a scalar.
value | Scalar value |
|
inline |
Adds two vectors.
vector | Right vector |
|
inline |
Adds and assigns two vectors.
vector | Right vector |
|
inline |
Returns the negated vector.
|
inline |
Subtracts two vectors.
vector | Right vector |
|
inline |
Subtracts and assigns two vectors.
vector | Right vector |
|
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.
value | Scalar value to be used as denominator, must not be zero |
|
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.
value | Scalar value to be used as denominator, must not be zero |
|
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.
vector | The second vector to compare |
|
inline |
Copy assigns a vector.
vector | 2D vector that is copied |
|
inline |
Returns whether two vectors are identical up to a small epsilon.
vector | Right vector |
|
inlinenoexcept |
Element access operator.
index | Index of the element to access, with range [0, 1] |
|
inlinenoexcept |
Element access operator.
index | Index of the element to access, with range [0, 1] |
|
inline |
Returns a vector perpendicular to this vectors.
The cross product between this vector and the resulting perpendicular vector will have a positive value.
|
inline |
Returns the square of the vector length.
|
inline |
Returns the square distance between this 2D position and a second 2D position.
right | Second 2D position |
|
inline |
|
inline |
|
inlinestatic |
Converts vectors with specific data type to vectors with different data type.
vectors | The vectors to convert |
U | The element data type of the vectors to convert |
|
inlinestatic |
Converts vectors with specific data type to vectors with different data type.
vectors | The vectors to convert |
size | The number of vector to convert |
U | The element data type of the vectors to convert |
|
inline |
|
inline |
|
inlinestatic |
Converts vectors with specific data type to vectors with different data type.
vectors | The vectors to convert |
U | The element data type of the vectors to convert |
|
inlinenoexcept |
Returns the x value.
|
inlinenoexcept |
Returns the x value.
|
inlinenoexcept |
Returns the y value.
|
inlinenoexcept |
Returns the y value.
|
protected |
The two values of the vector, with element order x, y.