30 rectangle(
aarectangle rhs) noexcept : corners{get<0>(rhs), get<1>(rhs), get<2>(rhs), get<3>(rhs)} {}
34 std::get<0>(corners) = get<0>(rhs);
35 std::get<1>(corners) = get<1>(rhs);
36 std::get<2>(corners) = get<2>(rhs);
37 std::get<3>(corners) = get<3>(rhs);
42 corners{corner0, corner0 + extent.right(), corner0 + extent.up(), corner0 + extent.right() + extent.up()}
46 [[nodiscard]]
explicit operator aarectangle()
const noexcept
56 return std::get<1>(corners) - std::get<0>(corners);
63 return std::get<2>(corners) - std::get<0>(corners);
66 float width() const noexcept
71 float height() const noexcept
76 extent2 extent() const noexcept
78 return {width(), height()};
81 [[nodiscard]] point3
constexpr operator[](
size_t i)
const noexcept
88 [[nodiscard]]
friend constexpr point3 get(rectangle
const &rhs)
noexcept
91 return std::get<I>(rhs.corners);
94 [[nodiscard]]
friend rectangle expand(rectangle
const &lhs,
float rhs)
noexcept
96 ttlet rightDirection = normalize(lhs.right_vector());
97 ttlet upDirection = normalize(lhs.up_vector());
100 get<0>(lhs) + rhs * -rightDirection + rhs * -upDirection,
101 get<1>(lhs) + rhs * rightDirection + rhs * -upDirection,
102 get<2>(lhs) + rhs * -rightDirection + rhs * upDirection,
103 get<3>(lhs) + rhs * rightDirection + rhs * upDirection};
106 [[nodiscard]]
friend rectangle shrink(rectangle
const &lhs,
float rhs)
noexcept
108 return expand(lhs, -rhs);