8#include "numeric_array.hpp"
27 tt_axiom(
min.z() == 0.0f &&
min.w() == 0.0f);
28 tt_axiom(
max.z() == 0.0f &&
max.w() == 0.0f);
29 tt_axiom(
min.x() <=
max.x());
30 tt_axiom(
min.y() <=
max.y());
52 [[nodiscard]]
static interval_vec2 make_minimum(
float x,
float y)
noexcept
54 return make_minimum(
f32x4{x, y});
62 [[nodiscard]]
static interval_vec2 make_maximum(
float x,
float y)
noexcept
64 return make_maximum(
f32x4{x, y});
69 return {
f32x4{}, other};
72 [[nodiscard]]
static interval_vec2 make_zero_to_maximum(
float x,
float y)
noexcept
74 return make_zero_to_maximum(
f32x4{x, y});
77 [[nodiscard]]
f32x4 minimum()
const noexcept
79 return (-value).xy00();
82 [[nodiscard]]
f32x4 maximum()
const noexcept
87 [[nodiscard]]
finterval x()
const noexcept
92 [[nodiscard]]
finterval y()
const noexcept
97 [[nodiscard]]
finterval width()
const noexcept
102 [[nodiscard]]
finterval height()
const noexcept
109 return make(value.x0z0());
114 return make(value._0y0w());
125 value -= rhs.value.yxwz();
131 return make(lhs.value + rhs.value);
136 return make(lhs.value - rhs.value.yxwz());
141 return lhs.value == rhs.value;
148 return lhs.x() < rhs.minimum().x() || lhs.y() < rhs.minimum().y();
155 return lhs.x() > rhs.maximum().x() || lhs.y() > rhs.maximum().y();
159 return fmt::format(
"({}:{}, {}:{})", rhs.value.x(), rhs.value.z(), rhs.value.y(), rhs.value.w());
164 return lhs << to_string(rhs);
174 return make(
min(lhs.value, rhs.value));
182 return make(
max(lhs.value, rhs.value));
189 ttlet tmp_max =
max(lhs.value, rhs.value);
190 ttlet tmp_min =
min(lhs.value, rhs.value);
191 return make(tmp_max.xy00() + tmp_min._00zw());
198 ttlet tmp_max =
max(lhs.value, rhs.value);
199 ttlet tmp_min =
min(lhs.value, rhs.value);
200 return make(tmp_min.xy00() + tmp_max._00zw());
206 tt_axiom(-other.x() <= other.z());
207 tt_axiom(-other.y() <= other.w());
Definition interval.hpp:17
A 2D vector using interval arithmetic.
Definition interval_vec2.hpp:18
friend interval_vec2 merge(interval_vec2 const &lhs, interval_vec2 const &rhs) noexcept
Merge two intervals.
Definition interval_vec2.hpp:180
friend interval_vec2 min(interval_vec2 const &lhs, interval_vec2 const &rhs) noexcept
Get the maximum interval of both operants.
Definition interval_vec2.hpp:187
friend interval_vec2 intersect(interval_vec2 const &lhs, interval_vec2 const &rhs) noexcept
Intersect two intervals.
Definition interval_vec2.hpp:172
friend bool operator>>(f32x4 const &lhs, interval_vec2 const &rhs) noexcept
Check if lhs.x or lhs.y is larger then rhs.maximum.
Definition interval_vec2.hpp:153
friend interval_vec2 max(interval_vec2 const &lhs, interval_vec2 const &rhs) noexcept
Get the minimum interval of both operants.
Definition interval_vec2.hpp:196
friend bool operator<<(f32x4 const &lhs, interval_vec2 const &rhs) noexcept
Check if lhs.x or lhs.y is smaller then rhs.minimum.
Definition interval_vec2.hpp:146