8#include "../SIMD/module.hpp"
9#include "../macros.hpp"
11namespace hi {
inline namespace v1 {
23 using value_type = array_type::value_type;
130 return *
this = *
this + rhs;
135 return *
this = *
this - rhs;
138 constexpr vector3& operator*=(
float const& rhs)
noexcept
140 return *
this = *
this * rhs;
150 return vector3{lhs._v + rhs._v};
160 return vector3{lhs._v - rhs._v};
180 return vector3{array_type::broadcast(lhs) * rhs._v};
190 return equal(lhs._v, rhs._v);
246 if (
angle !=
float{0}) {
247 hi_not_implemented();
259 return vector3{
cross_3D(
static_cast<array_type
>(lhs),
static_cast<array_type
>(rhs))};
269 return vector3{
min(
static_cast<array_type
>(lhs),
static_cast<array_type
>(rhs))};
279 return vector3{
max(
static_cast<array_type
>(lhs),
static_cast<array_type
>(rhs))};
293 return vector3{
ceil(
static_cast<array_type
>(rhs))};
308 return _v.w() == 0.0f;
313 return std::format(
"({}, {}, {})", rhs._v.x(), rhs._v.y(), rhs._v.z());
318 return lhs << to_string(rhs);
329template<
typename CharT>
330struct std::formatter<
hi::vector3, CharT> {
338 return std::vformat_to(fc.out(),
"({}, {}, {})", std::make_format_args(t.
x(), t.
y(), t.
z()));
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm.hpp:16
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector2.hpp:19
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector3.hpp:20
constexpr vector3 operator-() const noexcept
Mirror this vector.
Definition vector3.hpp:123
constexpr friend float rcp_hypot(vector3 const &rhs) noexcept
Get the length of the vector.
Definition vector3.hpp:215
constexpr friend vector3 operator+(vector3 const &lhs, vector3 const &rhs) noexcept
Add two vectors from each other.
Definition vector3.hpp:148
constexpr friend vector3 operator*(vector3 const &lhs, float const &rhs) noexcept
Scale the vector by a scaler.
Definition vector3.hpp:168
constexpr friend vector3 operator*(float const &lhs, vector3 const &rhs) noexcept
Scale the vector by a scaler.
Definition vector3.hpp:178
constexpr friend bool operator==(vector3 const &lhs, vector3 const &rhs) noexcept
Compare if two vectors are equal.
Definition vector3.hpp:188
friend constexpr vector3 max(vector3 const &lhs, vector3 const &rhs) noexcept
Mix the two vectors and get the highest value of each element.
Definition vector3.hpp:277
friend constexpr vector3 min(vector3 const &lhs, vector3 const &rhs) noexcept
Mix the two vectors and get the lowest value of each element.
Definition vector3.hpp:267
constexpr vector3(float x, float y, float z=0.0f) noexcept
Construct a 3D vector from x, y and z elements.
Definition vector3.hpp:70
constexpr friend vector3 operator-(vector3 const &lhs, vector3 const &rhs) noexcept
Subtract two vectors from each other.
Definition vector3.hpp:158
constexpr float z() const noexcept
Access the z element from the vector.
Definition vector3.hpp:115
constexpr float & x() noexcept
Access the x element from the vector.
Definition vector3.hpp:75
constexpr friend float dot(vector3 const &lhs, vector3 const &rhs) noexcept
Get the dot product between two vectors.
Definition vector3.hpp:234
constexpr float x() const noexcept
Access the x element from the vector.
Definition vector3.hpp:99
constexpr vector3(array_type const &other) noexcept
Construct a vector from a array_type-simd.
Definition vector3.hpp:56
constexpr friend float squared_hypot(vector3 const &rhs) noexcept
Get the squared length of the vector.
Definition vector3.hpp:197
friend constexpr vector3 round(vector3 const &rhs) noexcept
Round the elements of the vector toward nearest integer.
Definition vector3.hpp:284
constexpr friend vector3 normalize(vector3 const &rhs) noexcept
Normalize a vector to a unit vector.
Definition vector3.hpp:224
friend float hypot(vector3 const &rhs) noexcept
Get the length of the vector.
Definition vector3.hpp:206
constexpr friend vector3 cross(vector3 const &lhs, vector3 const &rhs) noexcept
Get the cross product between two 3D vectors.
Definition vector3.hpp:257
constexpr bool holds_invariant() const noexcept
Check if the vector is valid.
Definition vector3.hpp:306
constexpr float & y() noexcept
Access the y element from the vector.
Definition vector3.hpp:83
constexpr vector3() noexcept
Construct a empty vector / zero length.
Definition vector3.hpp:63
constexpr vector3(vector2 const &other) noexcept
Construct a vector from a lower dimension vector.
Definition vector3.hpp:32
constexpr float y() const noexcept
Access the y element from the vector.
Definition vector3.hpp:107
friend constexpr vector3 ceil(vector3 const &rhs) noexcept
Round the elements of the vector toward upward and to the right.
Definition vector3.hpp:291
friend constexpr vector3 floor(vector3 const &rhs) noexcept
Round the elements of the vector toward downward and to the left.
Definition vector3.hpp:298
constexpr friend vector3 normal(vector3 const &rhs, float angle) noexcept
Get the normal on a 3D vector.
Definition vector3.hpp:244
constexpr float & z() noexcept
Access the z element from the vector.
Definition vector3.hpp:91