10namespace hi {
inline namespace v1 {
14 using array_type = simd<float, 4>;
15 using value_type = array_type::value_type;
19 constexpr scale2& operator=(
scale2 const&)
noexcept =
default;
20 constexpr scale2& operator=(
scale2&&)
noexcept =
default;
22 [[nodiscard]]
constexpr explicit operator f32x4()
const noexcept
27 [[nodiscard]]
constexpr explicit scale2(f32x4
const& v) noexcept : _v(v)
32 [[nodiscard]]
constexpr explicit scale2(
vector2 const& v) noexcept : _v(
static_cast<f32x4
>(v).xyz1()) {}
34 [[nodiscard]]
constexpr scale2() noexcept : _v(1.0f, 1.0f, 1.0f, 1.0f) {}
36 [[nodiscard]]
constexpr scale2(
float value) noexcept : _v(value, value, value, 1.0f) {}
38 [[nodiscard]]
constexpr scale2(
float x,
float y) noexcept : _v(x, y, 1.0f, 1.0f) {}
47 hilet non_uniform_scale = f32x4{dst_extent}.xyxy() / f32x4{src_extent}.xyxy();
48 hilet uniform_scale =
std::min(non_uniform_scale.x(), non_uniform_scale.y());
49 return scale2{uniform_scale};
52 [[nodiscard]]
constexpr friend bool operator==(
scale2 const& lhs,
scale2 const& rhs)
noexcept
54 return equal(lhs._v, rhs._v);
57 [[nodiscard]]
constexpr bool holds_invariant() const noexcept
59 return _v.z() == 1.0f and _v.w() == 1.0f;
62 [[nodiscard]]
constexpr float& x() noexcept
67 [[nodiscard]]
constexpr float& y() noexcept
72 [[nodiscard]]
constexpr float x() const noexcept
77 [[nodiscard]]
constexpr float y() const noexcept
86[[nodiscard]]
constexpr scale2 operator/(extent2
const& lhs, extent2
const& rhs)
noexcept
88 hi_axiom(rhs.width() > 0.0f and rhs.height() > 0.0f);
89 return scale2{f32x4{lhs}.xy11() / f32x4{rhs}.xy11()};
Defined the geo::extent, extent2 and extent3 types.
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
A high-level geometric extent.
Definition extent2.hpp:26
static constexpr scale2 uniform(extent2 src_extent, extent2 dst_extent) noexcept
Get a uniform-scale-transform to scale an extent to another extent.
Definition scale2.hpp:45
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector2.hpp:18