7#include "../SIMD/module.hpp"
9namespace hi {
inline namespace v1 {
20 using array_type = simd<float, 4>;
21 using value_type = array_type::value_type;
30 [[nodiscard]]
constexpr explicit operator array_type() const noexcept
44 [[nodiscard]]
constexpr vector2() noexcept : _v(0.0f, 0.0f, 0.0f, 0.0f) {}
51 [[nodiscard]]
constexpr vector2(
float x,
float y) noexcept : _v(
x,
y, 0.0f, 0.0f) {}
56 [[nodiscard]]
constexpr float&
x() noexcept
64 [[nodiscard]]
constexpr float&
y() noexcept
72 [[nodiscard]]
constexpr float x() const noexcept
80 [[nodiscard]]
constexpr float y() const noexcept
95 return *
this = *
this + rhs;
100 return *
this = *
this - rhs;
103 constexpr vector2& operator*=(
float const& rhs)
noexcept
105 return *
this = *
this * rhs;
115 return vector2{lhs._v + rhs._v};
125 return vector2{lhs._v - rhs._v};
145 return vector2{array_type::broadcast(lhs) * rhs._v};
155 return equal(lhs._v, rhs._v);
164 return squared_hypot<0b0011>(rhs._v);
173 return hypot<0b0011>(rhs._v);
182 return rcp_hypot<0b0011>(rhs._v);
191 return vector2{normalize<0b0011>(rhs._v)};
201 return dot<0b0011>(lhs._v, rhs._v);
211 return lhs.x() * rhs.y() - lhs.y() * rhs.x();
220 return vector2{cross_2D(
static_cast<f32x4
>(rhs))};
233 return cross_2D(
static_cast<f32x4
>(lhs),
static_cast<f32x4
>(rhs));
252 return vector2{
min(
static_cast<array_type
>(lhs),
static_cast<array_type
>(rhs))};
262 return vector2{
max(
static_cast<array_type
>(lhs),
static_cast<array_type
>(rhs))};
276 return vector2{
ceil(
static_cast<array_type
>(rhs))};
291 return _v.z() == 0.0f and _v.w() == 0.0f;
296 return std::format(
"({}, {})", rhs._v.x(), rhs._v.y());
301 return lhs << to_string(rhs);
310template<
typename CharT>
311struct std::formatter<
hi::vector2, CharT> {
319 return std::vformat_to(fc.out(),
"({}, {})", std::make_format_args(t.
x(), t.
y()));
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector2.hpp:18
constexpr vector2() noexcept
Construct a empty vector / zero length.
Definition vector2.hpp:44
constexpr float & x() noexcept
Access the x element from the vector.
Definition vector2.hpp:56
constexpr float y() const noexcept
Access the y element from the vector.
Definition vector2.hpp:80
constexpr vector2(array_type const &other) noexcept
Construct a vector from a array_type-simd.
Definition vector2.hpp:37
friend constexpr vector2 round(vector2 const &rhs) noexcept
Round the elements of the vector toward nearest integer.
Definition vector2.hpp:267
constexpr bool holds_invariant() const noexcept
Check if the vector is valid.
Definition vector2.hpp:289
constexpr friend vector2 normalize(vector2 const &rhs) noexcept
Normalize a vector to a unit vector.
Definition vector2.hpp:189
constexpr vector2(float x, float y) noexcept
Construct a 3D vector from x, y and z elements.
Definition vector2.hpp:51
constexpr friend vector2 cross(vector2 const &rhs) noexcept
Get the cross product of one 2D vectors.
Definition vector2.hpp:218
constexpr friend float dot(vector2 const &lhs, vector2 const &rhs) noexcept
Get the dot product between two vectors.
Definition vector2.hpp:199
friend constexpr vector2 max(vector2 const &lhs, vector2 const &rhs) noexcept
Mix the two vectors and get the highest value of each element.
Definition vector2.hpp:260
friend constexpr vector2 ceil(vector2 const &rhs) noexcept
Round the elements of the vector toward upward and to the right.
Definition vector2.hpp:274
friend constexpr vector2 floor(vector2 const &rhs) noexcept
Round the elements of the vector toward downward and to the left.
Definition vector2.hpp:281
constexpr friend vector2 normal(vector2 const &rhs) noexcept
Get the normal on a 2D vector.
Definition vector2.hpp:240
friend float hypot(vector2 const &rhs) noexcept
Get the length of the vector.
Definition vector2.hpp:171
constexpr friend bool operator==(vector2 const &lhs, vector2 const &rhs) noexcept
Compare if two vectors are equal.
Definition vector2.hpp:153
constexpr friend vector2 operator*(float const &lhs, vector2 const &rhs) noexcept
Scale the vector by a scaler.
Definition vector2.hpp:143
constexpr friend float cross(vector2 const &lhs, vector2 const &rhs) noexcept
Get the cross product between two 2D vectors.
Definition vector2.hpp:231
constexpr friend vector2 operator+(vector2 const &lhs, vector2 const &rhs) noexcept
Add two vectors from each other.
Definition vector2.hpp:113
constexpr friend vector2 operator-(vector2 const &lhs, vector2 const &rhs) noexcept
Subtract two vectors from each other.
Definition vector2.hpp:123
constexpr float & y() noexcept
Access the y element from the vector.
Definition vector2.hpp:64
constexpr friend float det(vector2 const &lhs, vector2 const &rhs) noexcept
Get the determinate between two vectors.
Definition vector2.hpp:209
constexpr friend float rcp_hypot(vector2 const &rhs) noexcept
Get the length of the vector.
Definition vector2.hpp:180
constexpr friend float squared_hypot(vector2 const &rhs) noexcept
Get the squared length of the vector.
Definition vector2.hpp:162
constexpr float x() const noexcept
Access the x element from the vector.
Definition vector2.hpp:72
constexpr friend vector2 operator*(vector2 const &lhs, float const &rhs) noexcept
Scale the vector by a scaler.
Definition vector2.hpp:133
constexpr vector2 operator-() const noexcept
Mirror this vector.
Definition vector2.hpp:88
friend constexpr vector2 min(vector2 const &lhs, vector2 const &rhs) noexcept
Mix the two vectors and get the lowest value of each element.
Definition vector2.hpp:250