43 constexpr quad(rectangle
const &rhs) noexcept : p0(get<0>(rhs)), p1(get<1>(rhs)), p2(get<2>(rhs)), p3(get<3>(rhs)) {}
147 hilet t = f32x4{lhs.top()};
148 hilet l = f32x4{lhs.left()};
149 hilet b = f32x4{lhs.bottom()};
150 hilet r = f32x4{lhs.right()};
152 hilet[x, y, z, ones] = transpose(t, l, b, r);
153 hilet square_lengths = x * x + y * y + z * z;
154 hilet inv_lengths = rcp_sqrt(square_lengths);
155 hilet norm_t = t * inv_lengths.xxxx();
156 hilet norm_l = l * inv_lengths.yyyy();
157 hilet norm_b = b * inv_lengths.zzzz();
158 hilet norm_r = r * inv_lengths.wwww();
160 hilet extra_width = rhs.xxxx();
161 hilet extra_height = rhs.yyyy();
163 hilet top_extra = vector3{norm_t * extra_width};
164 hilet left_extra = vector3{norm_l * extra_height};
165 hilet bottom_extra = vector3{norm_b * extra_width};
166 hilet right_extra = vector3{norm_r * extra_height};
168 hilet lengths = rcp(inv_lengths);
170 hilet rhs_times_2 = rhs + rhs;
174 lhs.p0 - bottom_extra - left_extra,
175 lhs.p1 + bottom_extra - right_extra,
176 lhs.p2 - top_extra + left_extra,
177 lhs.p3 + top_extra + right_extra},
178 lengths + rhs_times_2.xyxy()};