Ocean
|
This class implements a vector with three elements. More...
Public Types | |
typedef T | Type |
Definition of the used data type. More... | |
Public Member Functions | |
VectorT3 () noexcept | |
Creates a new 3D vector with undefined elements. More... | |
VectorT3 (const bool setToHomogeneous) noexcept | |
Creates a new 3D vector. More... | |
VectorT3 (const T &x, const T &y, const T &z) noexcept | |
Creates a new 3D vector with three given elements. More... | |
VectorT3 (const T *valueArray) noexcept | |
Creates a new 3D vector with a given array of elements. More... | |
VectorT3 (const VectorT2< T > &vector, const T &z=0) noexcept | |
Creates a new 3D vector with a given 2D vector defining the first two elements and a single value defining the third element. More... | |
VectorT3 (const VectorT3< T > &vector) noexcept | |
Copies a vector. More... | |
template<typename U > | |
VectorT3 (const VectorT3< U > &vector) noexcept | |
Copies a vector with different element data type than T. More... | |
VectorT3< T > | cross (const VectorT3< T > &vector) const |
Returns the cross product of two vectors. More... | |
VectorT3< T > | normalized () const |
Returns the normalized vector. More... | |
VectorT3< T > | normalizedOrZero () const |
Returns the normalized vector. More... | |
VectorT3< T > | normalizedOrValue (const VectorT3< 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 VectorT3< T > &right) const |
Returns the distance between this 3D position and a second 3D position. More... | |
T | sqrDistance (const VectorT3< T > &right) const |
Returns the square distance between this 3D position and a second 3D position. More... | |
T | angle (const VectorT3< T > &right) const |
Returns the angle between this vector and a second vectors. More... | |
VectorT3< T > | reflect (const VectorT3< T > &normal) const |
Returns the reflected vector of this vector corresponding to a given normal vector. More... | |
VectorT3< T > | refract (const VectorT3< T > &normal, const T index) const |
Returns the refracted vector of this vector corresponding to a given normal vector. More... | |
VectorT3< T > | perpendicular () const |
Returns a vector that is perpendicular to this vector. More... | |
bool | isParallel (const VectorT3< T > &right) const |
Returns whether two vectors are parallel. More... | |
bool | isOrthogonal (const VectorT3< T > &right) 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 & | z () const noexcept |
Returns the z value. More... | |
T & | z () noexcept |
Returns the z value. More... | |
VectorT2< T > | xy () const noexcept |
Returns the x and y component of the vector as new 2D vector. 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 VectorT3< T > &vector, const T eps) const |
Returns whether two vectors are equal up to a specified epsilon. More... | |
VectorT3 & | operator= (const VectorT3< T > &vector) |
Copy assigns a vector. More... | |
bool | operator== (const VectorT3< T > &vector) const |
Returns whether two vectors are identical up to a small epsilon. More... | |
bool | operator!= (const VectorT3< T > &vector) const |
Returns whether two vectors are not identical up to a small epsilon. More... | |
VectorT3< T > | operator+ (const VectorT3< T > &vector) const |
Adds two vectors. More... | |
VectorT3< T > & | operator+= (const VectorT3< T > &vector) |
Adds and assigns two vectors. More... | |
VectorT3< T > | operator- (const VectorT3< T > &vector) const |
Subtracts two vectors. More... | |
VectorT3< T > & | operator-= (const VectorT3< T > &vector) |
Subtracts and assigns two vectors. More... | |
VectorT3< T > | operator- () const |
Returns the negated vector. More... | |
T | operator* (const VectorT3< T > &vector) const |
Returns the dot product of two vectors. More... | |
VectorT3< T > | operator* (const T &value) const |
Multiplies this vector with a scalar. More... | |
VectorT3< T > & | operator*= (const T &value) |
Multiplies and assigns this vector with a scalar. More... | |
VectorT3< T > | operator/ (const T &value) const |
Divides this vector by a scalar. More... | |
VectorT3< T > & | operator/= (const T &value) |
Divides and assigns this vector by a scalar. More... | |
bool | operator< (const VectorT3< 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 VectorT3< T > &vector) const |
Hash function. More... | |
std::vector< VectorT3< float > > | vectors2vectors (std::vector< VectorT3< float >> &&vectors) |
std::vector< VectorT3< double > > | vectors2vectors (std::vector< VectorT3< double >> &&vectors) |
std::vector< VectorT3< float > > | vectors2vectors (const std::vector< VectorT3< float >> &vectors) |
std::vector< VectorT3< double > > | vectors2vectors (const std::vector< VectorT3< double >> &vectors) |
Static Public Member Functions | |
template<typename U > | |
static std::vector< VectorT3< T > > | vectors2vectors (std::vector< VectorT3< U >> &&vectors) |
Converts vectors with specific data type to vectors with different data type. More... | |
template<typename U > | |
static std::vector< VectorT3< T > > | vectors2vectors (const std::vector< VectorT3< U >> &vectors) |
Converts vectors with specific data type to vectors with different data type. More... | |
template<typename U > | |
static std::vector< VectorT3< T > > | vectors2vectors (const VectorT3< U > *vectors, const size_t size) |
Converts vectors with specific data type to vectors with different data type. More... | |
Protected Attributes | |
T | values_ [3] |
The three values of the vector, with element order x, y, z. More... | |
This class implements a vector with three elements.
The element order is: (x, y, z).
T | Data type of the vector elements. |
typedef T Ocean::VectorT3< T >::Type |
Definition of the used data type.
|
inlinenoexcept |
Creates a new 3D vector with undefined elements.
Beware: The elements are neither zero nor a specific value! This is useful in situations where VectorT3 objects are created (e.g, by a large array or vector) and their values are assigned in a function afterwards.
|
inlineexplicitnoexcept |
Creates a new 3D vector.
setToHomogeneous | Determines whether a homogeneous vector (0, 0, 1) will be created, otherwise the vector is initialized with zeros |
|
inlinenoexcept |
Creates a new 3D vector with three given elements.
x | X value |
y | Y value |
z | Z value |
|
inlineexplicitnoexcept |
Creates a new 3D vector with a given array of elements.
valueArray | Array with at least three elements |
|
inlineexplicitnoexcept |
Creates a new 3D vector with a given 2D vector defining the first two elements and a single value defining the third element.
vector | 2D vector defining the first two elements (X and Y value) |
z | Z value defining the third element |
|
inlinenoexcept |
Copies a vector.
vector | 3D vector that is copied |
|
inlineexplicitnoexcept |
Copies a vector with different element data type than T.
vector | The 3D vector to copy |
U | The element data type of the second vector |
T Ocean::VectorT3< T >::angle | ( | const VectorT3< 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 vectors.
The cross product of two parallel vectors (or of at least one zero vector) results in a zero vector.
vector | The right vector |
|
inlinenoexcept |
Returns an pointer to the vector elements.
|
inlinenoexcept |
Returns an pointer to the vector elements.
|
inline |
Returns the distance between this 3D position and a second 3D position.
right | Second 3D 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.
|
inline |
Returns whether two vectors are orthogonal.
A zero vector will not be orthogonal.
right | The right vector |
bool Ocean::VectorT3< T >::isParallel | ( | const VectorT3< T > & | right | ) | const |
Returns whether two vectors are parallel.
A zero vector will not be parallel.
right | The right vector |
|
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 | The index of the element to access, with range [0, 2] |
|
inlinenoexcept |
Element access operator.
index | The index of the element to access, with range [0, 2] |
|
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 | 3D vector that is copied |
|
inline |
Returns whether two vectors are identical up to a small epsilon.
vector | Right vector |
|
inlinenoexcept |
Element access operator.
index | The index of the element to access, with range [0, 2] |
|
inlinenoexcept |
Element access operator.
index | The index of the element to access, with range [0, 2] |
VectorT3< T > Ocean::VectorT3< T >::perpendicular |
Returns a vector that is perpendicular to this vector.
If this vector is a zero vector, than the resulting vector will be arbitrary.
VectorT3< T > Ocean::VectorT3< T >::reflect | ( | const VectorT3< T > & | normal | ) | const |
Returns the reflected vector of this vector corresponding to a given normal vector.
The dot product between this vector and the normal vector must be positive.
normal | The normal vector used to determine the reflection vector for |
VectorT3< T > Ocean::VectorT3< T >::refract | ( | const VectorT3< T > & | normal, |
const T | index | ||
) | const |
Returns the refracted vector of this vector corresponding to a given normal vector.
The dot product between this vector and the normal vector must be positive.
normal | The normal vector used to determine the refracted vector for |
index | Refraction index that is the ratio between the leaving and the entering refraction index, an index lower than 1 describes the transition from a thin into a thick medium, with range (0, infinity) |
|
inline |
Returns the square of the vector length.
|
inline |
Returns the square distance between this 3D position and a second 3D position.
right | Second 3D 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 x and y component of the vector as new 2D vector.
|
inlinenoexcept |
Returns the y value.
|
inlinenoexcept |
Returns the y value.
|
inlinenoexcept |
Returns the z value.
|
inlinenoexcept |
Returns the z value.
|
protected |
The three values of the vector, with element order x, y, z.