12#include "translate3.hpp"
15#include "../macros.hpp"
18namespace hi {
inline namespace v1 {
21[[
nodiscard]]
constexpr matrix3 operator*(translate3
const& lhs, scale3
const& rhs)
noexcept;
22[[
nodiscard]]
constexpr matrix3 operator*(translate3
const& lhs, rotate3
const& rhs)
noexcept;
41 hilet a = f32x4::broadcast(1.0f);
114 _col0(
c0r0,
c0r1,
c0r2, 0.0f), _col1(
c1r0,
c1r1,
c1r2, 0.0f), _col2(
c2r0,
c2r1,
c2r2, 0.0f), _col3(0.0f, 0.0f, 0.0f, 1.0f)
157 _col0(
c0r0,
c0r1,
c0r2,
c0r3), _col1(
c1r0,
c1r1,
c1r2,
c1r3), _col2(
c2r0,
c2r1,
c2r2,
c2r3), _col3(
c3r0,
c3r1,
c3r2,
c3r3)
189 _col0 =
f32x4{rhs}.x000();
190 _col1 =
f32x4{rhs}._0y00();
191 _col2 =
f32x4{rhs}._00z0();
192 _col3 =
f32x4{rhs}._000w();
197 hilet
ones = f32x4::broadcast(1.0f);
199 _col1 =
ones._0y00();
200 _col2 =
ones._00z0();
224 auto twos =
f32x4{-2.0f, 2.0f, 2.0f, 0.0f};
225 auto one =
f32x4{1.0f, 0.0f, 0.0f, 0.0f};
240 hi_axiom(holds_invariant());
241 return {_col0, _col1, _col2, _col3};
267 if constexpr (I == 0) {
269 }
else if constexpr (I == 1) {
271 }
else if constexpr (I == 2) {
273 }
else if constexpr (I == 3) {
276 hi_static_no_default();
288 if constexpr (I == 0) {
290 }
else if constexpr (I == 1) {
292 }
else if constexpr (I == 2) {
294 }
else if constexpr (I == 3) {
297 hi_static_no_default();
313 return {_col0 * rhs.xxxx() + _col1 * rhs.yyyy() + _col2 * rhs.zzzz() + _col3 * rhs.wwww()};
321 auto tmp =
transpose(rhs._col0, rhs._col1, rhs._col2, rhs._col3);
358 template<
char DstX,
char DstY,
char DstZ,
char DstW = 'w'>
371 return equal(lhs._col0, rhs._col0)
and equal(lhs._col1, rhs._col1)
and equal(lhs._col2, rhs._col2)
and
372 equal(lhs._col3, rhs._col3);
384 hilet
s0c0 = _col0 * _col1.yxwz();
390 hilet
s1c1 = _col0 * _col2.yxwz();
397 hilet
s2c2 = _col0 * _col3.yxwz();
403 hilet
s3c3 = _col1 * _col2.yxwz();
410 hilet
s4c4 = _col1 * _col3.yxwz();
416 hilet
s5c5 = _col2 * _col3.yxwz();
438 if (det.x() == 0.0f) {
495 if constexpr (
Axis ==
'x') {
496 return f32x4{1.0f, 0.0f, 0.0f, 0.0f};
497 }
else if constexpr (
Axis ==
'X') {
498 return f32x4{-1.0f, 0.0f, 0.0f, 0.0f};
499 }
else if constexpr (
Axis ==
'y') {
500 return f32x4{0.0f, 1.0f, 0.0f, 0.0f};
501 }
else if constexpr (
Axis ==
'Y') {
502 return f32x4{0.0f, -1.0f, 0.0f, 0.0f};
503 }
else if constexpr (
Axis ==
'z') {
504 return f32x4{0.0f, 0.0f, 1.0f, 0.0f};
505 }
else if constexpr (
Axis ==
'Z') {
506 return f32x4{0.0f, 0.0f, -1.0f, 0.0f};
507 }
else if constexpr (
Axis ==
'w') {
508 return f32x4{0.0f, 0.0f, 0.0f, 1.0f};
509 }
else if constexpr (
Axis ==
'W') {
510 return f32x4{0.0f, 0.0f, 0.0f, -1.0f};
512 hi_static_no_default();
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm.hpp:16
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
@ one
The number was one, and this means something in the current language.
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
Class which represents an axis-aligned rectangle.
Definition aarectangle.hpp:29
Horizontal/Vertical alignment combination.
Definition alignment.hpp:242
A 2D or 3D homogenius matrix for transforming homogenious vectors and points.
Definition matrix2.hpp:27
static constexpr matrix2 uniform(aarectangle src_rectangle, aarectangle dst_rectangle, alignment alignment) noexcept
Create a transformation matrix to translate and uniformly-scale a src_rectangle to a dst_rectangle.
Definition matrix2.hpp:229
A 2D or 3D homogenius matrix for transforming homogenious vectors and points.
Definition matrix3.hpp:30
friend constexpr matrix3 transpose(matrix3 const &rhs) noexcept
Matrix transpose.
Definition matrix3.hpp:319
constexpr f32x4 operator*(f32x4 const &rhs) const noexcept
Transform a f32x4 numeric array by the matrix.
Definition matrix3.hpp:311
friend constexpr matrix3 reflect(matrix3 const &rhs) noexcept
Reflect axis of a matrix.
Definition matrix3.hpp:359
constexpr matrix3(f32x4 col0, f32x4 col1, f32x4 col2, f32x4 col3=f32x4{0.0f, 0.0f, 0.0f, 1.0f}) noexcept
Construct a matrix from four columns.
Definition matrix3.hpp:55
constexpr matrix3(float c0r0, float c1r0, float c2r0, float c3r0, float c0r1, float c1r1, float c2r1, float c3r1, float c0r2, float c1r2, float c2r2, float c3r2, float c0r3, float c1r3, float c2r3, float c3r3) noexcept
Construct a 4x4 matrix from scalar values.
Definition matrix3.hpp:140
constexpr matrix3(matrix2 const &other) noexcept
Copy-construct a matrix from a smaller matrix.
Definition matrix3.hpp:163
constexpr matrix3(rotate3 const &rhs) noexcept
Convert quaternion to matrix.
Definition matrix3.hpp:207
constexpr friend bool operator==(matrix3 const &lhs, matrix3 const &rhs) noexcept
Compare two matrices potentially of different dimensions.
Definition matrix3.hpp:369
constexpr matrix3() noexcept
Constructs an identity matrix.
Definition matrix3.hpp:39
friend constexpr f32x4 & get(matrix3 &rhs) noexcept
Get a column.
Definition matrix3.hpp:286
constexpr matrix3 operator~() const
Invert matrix.
Definition matrix3.hpp:377
friend constexpr f32x4 const & get(matrix3 const &rhs) noexcept
Get a column.
Definition matrix3.hpp:265
constexpr matrix3(float c0r0, float c1r0, float c2r0, float c0r1, float c1r1, float c2r1, float c0r2, float c1r2, float c2r2) noexcept
Construct a matrix from two vectors.
Definition matrix3.hpp:104
static constexpr matrix3 uniform(aarectangle src_rectangle, aarectangle dst_rectangle, alignment alignment) noexcept
Create a transformation matrix to translate and uniformly-scale a src_rectangle to a dst_rectangle.
Definition matrix3.hpp:254
constexpr matrix3(vector3 col0, vector3 col1, vector3 col2, vector3 col3=vector3{}) noexcept
Construct a matrix from four vectors.
Definition matrix3.hpp:67
Definition rotate3.hpp:12
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector3.hpp:20