HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
v1::geo::vector< T, D > Class Template Reference

#include <hikogui/geometry/vector.hpp>

Public Types

using value_type = T
using array_type = simd<value_type, 4>

Public Member Functions

constexpr vector (vector const &) noexcept=default
constexpr vector (vector &&) noexcept=default
constexpr vector & operator= (vector const &) noexcept=default
constexpr vector & operator= (vector &&) noexcept=default
template<int E>
constexpr vector (vector< value_type, E > const &other) noexcept
 Construct a vector from a lower dimension vector.
template<int E>
constexpr vector (vector< value_type, E > const &other) noexcept
 Construct a vector from a higher dimension vector.
constexpr operator array_type () const noexcept
 Convert a vector to its array_type-nummeric_array.
constexpr vector (array_type const &other) noexcept
 Construct a vector from a array_type-simd.
constexpr vector () noexcept
 Construct a empty vector / zero length.
constexpr vector (value_type x, value_type y) noexcept
 Construct a 2D vector from x and y elements.
constexpr vector (value_type x, value_type y, value_type z=value_type{0}) noexcept
 Construct a 3D vector from x, y and z elements.
constexpr value_type & x () noexcept
 Access the x element from the vector.
constexpr value_type & y () noexcept
 Access the y element from the vector.
constexpr value_type & z () noexcept
 Access the z element from the vector.
constexpr value_type x () const noexcept
 Access the x element from the vector.
constexpr value_type y () const noexcept
 Access the y element from the vector.
constexpr value_type z () const noexcept
 Access the z element from the vector.
constexpr vector operator- () const noexcept
 Mirror this vector.
template<int E>
constexpr vector & operator+= (vector< value_type, E > const &rhs) noexcept
constexpr bool holds_invariant () const noexcept
 Check if the vector is valid.

Static Public Member Functions

static constexpr vector infinity () noexcept
static constexpr vector infinity () noexcept

Friends

constexpr friend vector operator+ (vector const &lhs, vector const &rhs) noexcept
 Add two vectors from each other.
constexpr friend vector operator- (vector const &lhs, vector const &rhs) noexcept
 Subtract two vectors from each other.
constexpr friend vector operator* (vector const &lhs, value_type const &rhs) noexcept
 Scale the vector by a scaler.
constexpr friend vector operator* (value_type const &lhs, vector const &rhs) noexcept
 Scale the vector by a scaler.
constexpr friend bool operator== (vector const &lhs, vector const &rhs) noexcept
 Compare if two vectors are equal.
constexpr friend value_type squared_hypot (vector const &rhs) noexcept
 Get the squared length of the vector.
constexpr friend value_type hypot (vector const &rhs) noexcept
 Get the length of the vector.
constexpr friend value_type rcp_hypot (vector const &rhs) noexcept
 Get the length of the vector.
constexpr friend vector normalize (vector const &rhs) noexcept
 Normalize a vector to a unit vector.
constexpr friend value_type dot (vector const &lhs, vector const &rhs) noexcept
 Get the dot product between two vectors.
constexpr friend value_type det (vector const &lhs, vector const &rhs) noexcept
 Get the determinate between two vectors.
constexpr vector min (vector const &lhs, vector const &rhs) noexcept
 Mix the two vectors and get the lowest value of each element.
constexpr vector max (vector const &lhs, vector const &rhs) noexcept
 Mix the two vectors and get the highest value of each element.
constexpr vector round (vector const &rhs) noexcept
 Round the elements of the vector toward nearest integer.
constexpr vector ceil (vector const &rhs) noexcept
 Round the elements of the vector toward upward and to the right.
constexpr vector floor (vector const &rhs) noexcept
 Round the elements of the vector toward downward and to the left.
std::string to_string (vector const &rhs) noexcept
std::ostreamoperator<< (std::ostream &lhs, vector const &rhs) noexcept

Detailed Description

template<typename T, int D>
class v1::geo::vector< T, D >

A high-level geometric vector Part of the high-level vector, point, mat and color types.

A vector, for both 2D or 3D is internally represented as a 4D homogeneous vector. Which can be efficiently implemented as a __m128 SSE register.

Constructor & Destructor Documentation

◆ vector() [1/6]

template<typename T, int D>
template<int E>
v1::geo::vector< T, D >::vector ( vector< value_type, E > const & other)
inlinenodiscardconstexprnoexcept

Construct a vector from a lower dimension vector.

◆ vector() [2/6]

template<typename T, int D>
template<int E>
v1::geo::vector< T, D >::vector ( vector< value_type, E > const & other)
inlineexplicitnodiscardconstexprnoexcept

Construct a vector from a higher dimension vector.

This will clear the values in the higher dimensions.

◆ vector() [3/6]

template<typename T, int D>
v1::geo::vector< T, D >::vector ( array_type const & other)
inlineexplicitnodiscardconstexprnoexcept

Construct a vector from a array_type-simd.

◆ vector() [4/6]

template<typename T, int D>
v1::geo::vector< T, D >::vector ( )
inlinenodiscardconstexprnoexcept

Construct a empty vector / zero length.

◆ vector() [5/6]

template<typename T, int D>
v1::geo::vector< T, D >::vector ( value_type x,
value_type y )
inlinenodiscardconstexprnoexcept

Construct a 2D vector from x and y elements.

Parameters
xThe x element.
yThe y element.

◆ vector() [6/6]

template<typename T, int D>
v1::geo::vector< T, D >::vector ( value_type x,
value_type y,
value_type z = value_type{0} )
inlinenodiscardconstexprnoexcept

Construct a 3D vector from x, y and z elements.

Parameters
xThe x element.
yThe y element.
zThe z element.

Member Function Documentation

◆ holds_invariant()

template<typename T, int D>
bool v1::geo::vector< T, D >::holds_invariant ( ) const
inlinenodiscardconstexprnoexcept

Check if the vector is valid.

This function will check if w is zero, and with 2D vector is z is zero.

◆ operator array_type()

template<typename T, int D>
v1::geo::vector< T, D >::operator array_type ( ) const
inlineexplicitnodiscardconstexprnoexcept

Convert a vector to its array_type-nummeric_array.

◆ operator-()

template<typename T, int D>
vector v1::geo::vector< T, D >::operator- ( ) const
inlinenodiscardconstexprnoexcept

Mirror this vector.

Returns
The mirrored vector.

◆ x() [1/2]

template<typename T, int D>
value_type v1::geo::vector< T, D >::x ( ) const
inlinenodiscardconstexprnoexcept

Access the x element from the vector.

Returns
a reference to the x element.

◆ x() [2/2]

template<typename T, int D>
value_type & v1::geo::vector< T, D >::x ( )
inlinenodiscardconstexprnoexcept

Access the x element from the vector.

Returns
a reference to the x element.

◆ y() [1/2]

template<typename T, int D>
value_type v1::geo::vector< T, D >::y ( ) const
inlinenodiscardconstexprnoexcept

Access the y element from the vector.

Returns
a reference to the y element.

◆ y() [2/2]

template<typename T, int D>
value_type & v1::geo::vector< T, D >::y ( )
inlinenodiscardconstexprnoexcept

Access the y element from the vector.

Returns
a reference to the y element.

◆ z() [1/2]

template<typename T, int D>
value_type v1::geo::vector< T, D >::z ( ) const
inlinenodiscardconstexprnoexcept

Access the z element from the vector.

Returns
a reference to the z element.

◆ z() [2/2]

template<typename T, int D>
value_type & v1::geo::vector< T, D >::z ( )
inlinenodiscardconstexprnoexcept

Access the z element from the vector.

Returns
a reference to the z element.

◆ ceil

template<typename T, int D>
vector ceil ( vector< T, D > const & rhs)
friend

Round the elements of the vector toward upward and to the right.

◆ det

template<typename T, int D>
friend value_type det ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Get the determinate between two vectors.

Parameters
lhsThe first vector.
rhsThe second vector.
Returns
The dot product from the two given vectors.

◆ dot

template<typename T, int D>
friend value_type dot ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Get the dot product between two vectors.

Parameters
lhsThe first vector.
rhsThe second vector.
Returns
The dot product from the two given vectors.

◆ floor

template<typename T, int D>
vector floor ( vector< T, D > const & rhs)
friend

Round the elements of the vector toward downward and to the left.

◆ hypot

template<typename T, int D>
friend value_type hypot ( vector< T, D > const & rhs)
friend

Get the length of the vector.

Parameters
rhsThe vector.
Returns
The length of the vector.

◆ max

template<typename T, int D>
vector max ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Mix the two vectors and get the highest value of each element.

Parameters
lhsThe first vector.
rhsThe first vector.
Returns
A vector that points the most right of both vectors, and most upward of both vectors.

◆ min

template<typename T, int D>
vector min ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Mix the two vectors and get the lowest value of each element.

Parameters
lhsThe first vector.
rhsThe first vector.
Returns
A vector that points the most left of both vectors, and most downward of both vectors.

◆ normalize

template<typename T, int D>
friend vector normalize ( vector< T, D > const & rhs)
friend

Normalize a vector to a unit vector.

Parameters
rhsThe vector.
Returns
A vector with the same direction as the given vector, but its length is 1.0.

◆ operator* [1/2]

template<typename T, int D>
friend vector operator* ( value_type const & lhs,
vector< T, D > const & rhs )
friend

Scale the vector by a scaler.

Parameters
lhsThe vector to scale.
rhsThe scaling factor.
Returns
The scaled vector.

◆ operator* [2/2]

template<typename T, int D>
friend vector operator* ( vector< T, D > const & lhs,
value_type const & rhs )
friend

Scale the vector by a scaler.

Parameters
lhsThe vector to scale.
rhsThe scaling factor.
Returns
The scaled vector.

◆ operator+

template<typename T, int D>
friend vector operator+ ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Add two vectors from each other.

Parameters
lhsThe first vector.
rhsThe second vector.
Returns
A new vector.

◆ operator-

template<typename T, int D>
friend vector operator- ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Subtract two vectors from each other.

Parameters
lhsThe first vector.
rhsThe second vector.
Returns
A new vector.

◆ operator==

template<typename T, int D>
friend bool operator== ( vector< T, D > const & lhs,
vector< T, D > const & rhs )
friend

Compare if two vectors are equal.

Parameters
lhsThe first vector.
rhsThe second vector.
Returns
True if both vectors are completely equal to each other.

◆ rcp_hypot

template<typename T, int D>
friend value_type rcp_hypot ( vector< T, D > const & rhs)
friend

Get the length of the vector.

Parameters
rhsThe vector.
Returns
One over the length of the vector.

◆ round

template<typename T, int D>
vector round ( vector< T, D > const & rhs)
friend

Round the elements of the vector toward nearest integer.

◆ squared_hypot

template<typename T, int D>
friend value_type squared_hypot ( vector< T, D > const & rhs)
friend

Get the squared length of the vector.

Parameters
rhsThe vector.
Returns
The length of the vector.

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