sead
Loading...
Searching...
No Matches
seadMatrix.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <math/seadMatrixCalcCommon.h>
4
5namespace sead {
6
7template <typename T>
8inline
10 T a00, T a01,
11 T a10, T a11
12)
13{
14 this->m[0][0] = a00;
15 this->m[0][1] = a01;
16
17 this->m[1][0] = a10;
18 this->m[1][1] = a11;
19}
20
21template <typename T>
22inline T
24{
25 return this->m[i][j];
26}
27
28template <typename T>
29inline T&
31{
32 return this->m[i][j];
33}
34
35template <typename T>
36inline Matrix22<T>&
38{
39 Matrix22CalcCommon<T>::copy(*this, n);
40 return *this;
41}
42
43template <typename T>
44inline void
49
50template <typename T>
51inline void
56
57template <typename T>
58inline void
60{
61 Matrix22CalcCommon<T>::inverse(*this, n);
62}
63
64template <typename T>
65inline void
70
71template <typename T>
72inline void
73Matrix22<T>::setMul(const Self& a, const Self& b)
74{
75 Matrix22CalcCommon<T>::multiply(*this, a, b);
76}
77
78template <typename T>
79inline void
81{
83}
84
85template <typename T>
86inline void
91
92template <typename T>
93inline void
98
99template <typename T>
100inline
102 T a00, T a01, T a02,
103 T a10, T a11, T a12,
104 T a20, T a21, T a22
105)
106{
107 this->m[0][0] = a00;
108 this->m[0][1] = a01;
109 this->m[0][2] = a02;
110
111
112 this->m[1][0] = a10;
113 this->m[1][1] = a11;
114 this->m[1][2] = a12;
115
116 this->m[2][0] = a20;
117 this->m[2][1] = a21;
118 this->m[2][2] = a22;
119}
120
121template <typename T>
122inline
124{
125 Matrix33CalcCommon<T>::copy(*this, mtx34);
126}
127
128template <typename T>
129inline T
131{
132 return this->m[i][j];
133}
134
135template <typename T>
136inline T&
138{
139 return this->m[i][j];
140}
141
142template <typename T>
143inline Matrix33<T>&
145{
146 Matrix33CalcCommon<T>::copy(*this, n);
147 return *this;
148}
149
150template <typename T>
151inline void
156
157template <typename T>
158inline void
160{
162}
163
164template <typename T>
165inline void
167{
168 Matrix33CalcCommon<T>::inverse(*this, n);
169}
170
171template <typename T>
172inline void
177
178template <typename T>
179inline void
180Matrix33<T>::setMul(const Self& a, const Self& b)
181{
182 Matrix33CalcCommon<T>::multiply(*this, a, b);
183}
184
185template <typename T>
186inline void
187Matrix33<T>::setMul(const Mtx34& a, const Self& b)
188{
189 Matrix33CalcCommon<T>::multiply(*this, a, b);
190}
191
192template <typename T>
193inline void
194Matrix33<T>::setMul(const Self& a, const Mtx34& b)
195{
196 Matrix33CalcCommon<T>::multiply(*this, a, b);
197}
198
199template <typename T>
200inline void
202{
204}
205
206template <typename T>
207inline void
209{
211}
212
213template <typename T>
214inline void
216{
217 Matrix33CalcCommon<T>::makeQ(*this, q);
218}
219
220template <typename T>
221inline void
223{
224 Matrix33CalcCommon<T>::makeR(*this, r);
225}
226
227template <typename T>
228inline void
230{
231 Matrix33CalcCommon<T>::makeRIdx(*this, xr, yr, zr);
232}
233
234template <typename T>
235inline void
240
241template <typename T>
242inline void
244{
245 Matrix33CalcCommon<T>::makeS(*this, s);
246}
247
248template <typename T>
249inline void
251{
252 Vec3 s(x, y, z);
253 Matrix33CalcCommon<T>::makeS(*this, s);
254}
255
256template <typename T>
257inline void
258Matrix33<T>::makeSR(const Vec3& s, const Vec3& r)
259{
260 Matrix33CalcCommon<T>::makeSR(*this, s, r);
261}
262
263template <typename T>
264inline void
265Matrix33<T>::makeSRIdx(const Vec3& s, const Vector3<u32>& r)
266{
267 Matrix33CalcCommon<T>::makeSRIdx(*this, s, r);
268}
269
270template <typename T>
271inline void
273{
275}
276
277template <typename T>
278inline void
280{
281 Matrix33CalcCommon<T>::toQuat(q, *this);
282}
283
284template <typename T>
285inline
287 T a00, T a01, T a02, T a03,
288 T a10, T a11, T a12, T a13,
289 T a20, T a21, T a22, T a23
290)
291{
292 this->m[0][0] = a00;
293 this->m[0][1] = a01;
294 this->m[0][2] = a02;
295 this->m[0][3] = a03;
296
297 this->m[1][0] = a10;
298 this->m[1][1] = a11;
299 this->m[1][2] = a12;
300 this->m[1][3] = a13;
301
302 this->m[2][0] = a20;
303 this->m[2][1] = a21;
304 this->m[2][2] = a22;
305 this->m[2][3] = a23;
306}
307
308template <typename T>
309inline
310Matrix34<T>::Matrix34(const Mtx33& mtx33, const Vec3& t)
311{
312 Matrix34CalcCommon<T>::copy(*this, mtx33, t);
313}
314
315template <typename T>
316inline
318{
319 Matrix34CalcCommon<T>::copy(*this, mtx44);
320}
321
322template <typename T>
323inline T
325{
326 return this->m[i][j];
327}
328
329template <typename T>
330inline T&
332{
333 return this->m[i][j];
334}
335
336template <typename T>
337inline Matrix34<T>&
339{
340 Matrix34CalcCommon<T>::copy(*this, n);
341 return *this;
342}
343
344template <typename T>
345inline void
350
351template <typename T>
352inline void
354{
356}
357
358template <typename T>
359inline void
361{
362 Matrix34CalcCommon<T>::inverse(*this, n);
363}
364
365template <typename T>
366inline void
368{
370}
371
372template <typename T>
373inline void
378
379template <typename T>
380inline void
381Matrix34<T>::setMul(const Self& a, const Self& b)
382{
383 Matrix34CalcCommon<T>::multiply(*this, a, b);
384}
385
386template <typename T>
387inline void
388Matrix34<T>::setMul(const Mtx33& a, const Self& b)
389{
390 Matrix34CalcCommon<T>::multiply(*this, a, b);
391}
392
393template <typename T>
394inline void
396{
398}
399
400template <typename T>
401inline void
403{
405}
406
407template <typename T>
408inline void
410{
411 Matrix34CalcCommon<T>::makeQ(*this, q);
412}
413
414template <typename T>
415inline void
417{
418 Quat q(w, x, y, z);
419 Matrix34CalcCommon<T>::makeQ(*this, q);
420}
421
422template <typename T>
423inline void
424Matrix34<T>::makeQT(const Quat& q, const Vec3& t)
425{
426 Matrix34CalcCommon<T>::makeQT(*this, q, t);
427}
428
429template <typename T>
430inline void
432{
433 Matrix34CalcCommon<T>::makeR(*this, r);
434}
435
436template <typename T>
437inline void
439{
440 Matrix34CalcCommon<T>::makeRIdx(*this, xr, yr, zr);
441}
442
443template <typename T>
444inline void
445Matrix34<T>::makeRT(const Vec3& r, const Vec3& t)
446{
447 Matrix34CalcCommon<T>::makeRT(*this, r, t);
448}
449
450template <typename T>
451inline void
452Matrix34<T>::makeRTIdx(const Vector3<u32>& r, const Vec3& t)
453{
454 Matrix34CalcCommon<T>::makeRTIdx(*this, r, t);
455}
456
457template <typename T>
458inline void
463
464template <typename T>
465inline void
467{
468 Matrix34CalcCommon<T>::makeRzxyIdx(*this, r.x, r.y, r.z);
469}
470
471template <typename T>
472inline void
474{
476}
477
478template <typename T>
479inline void
481{
482 Matrix34CalcCommon<T>::makeS(*this, s);
483}
484
485template <typename T>
486inline void
488{
489 Vec3 s(x, y, z);
490 Matrix34CalcCommon<T>::makeS(*this, s);
491}
492
493template <typename T>
494inline void
495Matrix34<T>::makeSQ(const Vec3& s, const Quat& q)
496{
497 Matrix34CalcCommon<T>::makeSQ(*this, s, q);
498}
499
500template <typename T>
501inline void
502Matrix34<T>::makeSQT(const Vec3& s, const Quat& q, const Vec3& t)
503{
504 Matrix34CalcCommon<T>::makeSQT(*this, s, q, t);
505}
506
507template <typename T>
508inline void
509Matrix34<T>::makeSR(const Vec3& s, const Vec3& r)
510{
511 Matrix34CalcCommon<T>::makeSR(*this, s, r);
512}
513
514template <typename T>
515inline void
516Matrix34<T>::makeSRIdx(const Vec3& s, const Vector3<u32>& r)
517{
518 Matrix34CalcCommon<T>::makeSRIdx(*this, s, r);
519}
520
521template <typename T>
522inline void
523Matrix34<T>::makeSRT(const Vec3& s, const Vec3& r, const Vec3& t)
524{
525 Matrix34CalcCommon<T>::makeSRT(*this, s, r, t);
526}
527
528template <typename T>
529inline void
530Matrix34<T>::makeSRTIdx(const Vec3& s, const Vector3<u32>& r, const Vec3& t)
531{
532 Matrix34CalcCommon<T>::makeSRTIdx(*this, s, r, t);
533}
534
535template <typename T>
536inline void
538{
540}
541
542template <typename T>
543inline void
544Matrix34<T>::makeSRzxyTIdx(const Vec3& s, const Vector3<u32>& r, const Vec3& t)
545{
547}
548
549template <typename T>
550inline void
551Matrix34<T>::makeST(const Vec3& s, const Vec3& t)
552{
553 Matrix34CalcCommon<T>::makeST(*this, s, t);
554}
555
556template <typename T>
557inline void
559{
560 Matrix34CalcCommon<T>::makeT(*this, t);
561}
562
563template <typename T>
564inline void
566{
567 Vec3 t(x, y, z);
568 Matrix34CalcCommon<T>::makeT(*this, t);
569}
570
571template <typename T>
572inline void
574{
575 Matrix34CalcCommon<T>::toQuat(q, *this);
576}
577
578template <typename T>
579inline void
581{
582 Matrix34CalcCommon<T>::multScaleLocal(*this, *this, s);
583}
584
585template <typename T>
586inline void
588{
590}
591
592template <typename T>
593inline void
598
599template <typename T>
600inline void
605
606template <typename T>
607inline void
609{
610 Matrix34CalcCommon<T>::multScaleWorld(*this, s, *this);
611}
612
613template <typename T>
614inline void
616{
617 Matrix34CalcCommon<T>::multScaleWorld(*this, Vec3(x, y, z), *this);
618}
619
620#ifdef cafe
621
622template <>
623inline void
628
629#endif // cafe
630
631template <typename T>
632inline void
634{
636}
637
638template <typename T>
639inline void
641{
643}
644
645#ifdef cafe
646
647template <>
648inline void
650{
651 ASM_MTXScaleApply(const_cast<f32(*)[4]>(n.m), m, x, y, z);
652}
653
654#endif // cafe
655
656template <typename T>
657inline void
662
663template <typename T>
664inline void
669
670#ifdef cafe
671
672template <>
673inline void
678
679#endif // cafe
680
681template <typename T>
682inline void
687
688template <typename T>
689inline void
694
695#ifdef cafe
696
697template <>
698inline void
700{
701 ASM_MTXTransApply(const_cast<f32(*)[4]>(n.m), m, x, y, z);
702}
703
704#endif // cafe
705
706template <typename T>
707inline void
709{
710 Matrix34CalcCommon<T>::getBase(o, *this, axis);
711}
712
713template <typename T>
714inline Matrix34<T>::Vec3
716{
717 Vec3 o;
718 Matrix34CalcCommon<T>::getBase(o, *this, axis);
719 return o;
720}
721
722template <typename T>
723inline void
725{
726 Matrix34CalcCommon<T>::getRow(o, *this, row);
727}
728
729template <typename T>
730inline Matrix34<T>::Vec4
732{
733 Vec4 o;
734 Matrix34CalcCommon<T>::getRow(o, *this, row);
735 return o;
736}
737
738template <typename T>
739inline void
741{
743}
744
745template <typename T>
746inline Matrix34<T>::Vec3
748{
749 Vec3 o;
751 return o;
752}
753
754template <typename T>
755inline void
760
761template <typename T>
762inline void
764{
765 Matrix34CalcCommon<T>::scaleBases(*this, s, s, s);
766}
767
768template <typename T>
769inline void
771{
773}
774
775template <typename T>
776inline void
778{
779 Matrix34CalcCommon<T>::scaleBases(*this, s.x, s.y, s.z);
780}
781
782template <typename T>
783inline void
785{
786 Matrix34CalcCommon<T>::setBase(*this, axis, v);
787}
788
789template <typename T>
790inline void
792{
793 Matrix34CalcCommon<T>::setRow(*this, v, row);
794}
795
796template <typename T>
797inline void
799{
801}
802
803template <typename T>
804inline void
806{
807 Vec3 t(x, y, z);
809}
810
811template <typename T>
812inline
814 T a00, T a01, T a02, T a03,
815 T a10, T a11, T a12, T a13,
816 T a20, T a21, T a22, T a23,
817 T a30, T a31, T a32, T a33
818)
819{
820 this->m[0][0] = a00;
821 this->m[0][1] = a01;
822 this->m[0][2] = a02;
823 this->m[0][3] = a03;
824
825 this->m[1][0] = a10;
826 this->m[1][1] = a11;
827 this->m[1][2] = a12;
828 this->m[1][3] = a13;
829
830 this->m[2][0] = a20;
831 this->m[2][1] = a21;
832 this->m[2][2] = a22;
833 this->m[2][3] = a23;
834
835 this->m[3][0] = a30;
836 this->m[3][1] = a31;
837 this->m[3][2] = a32;
838 this->m[3][3] = a33;
839}
840
841template <typename T>
842inline
843Matrix44<T>::Matrix44(const Mtx33& mtx33, const Vec3& t, const Vec4& vw)
844{
845 Matrix44CalcCommon<T>::copy(*this, mtx33, t, vw);
846}
847
848template <typename T>
849inline
851{
852 Matrix44CalcCommon<T>::copy(*this, mtx34, vw);
853}
854
855template <typename T>
856inline T
858{
859 return this->m[i][j];
860}
861
862template <typename T>
863inline T&
865{
866 return this->m[i][j];
867}
868
869template <typename T>
870inline Matrix44<T>&
872{
873 Matrix44CalcCommon<T>::copy(*this, n);
874 return *this;
875}
876
877template <typename T>
878inline void
883
884template <typename T>
885inline void
890
891template <typename T>
892inline void
894{
895 Matrix44CalcCommon<T>::inverse(*this, n);
896}
897
898template <typename T>
899inline void
900Matrix44<T>::setMul(const Self& a, const Self& b)
901{
902 Matrix44CalcCommon<T>::multiply(*this, a, b);
903}
904
905template <typename T>
906inline void
907Matrix44<T>::setMul(const Mtx34& a, const Self& b)
908{
909 Matrix44CalcCommon<T>::multiply(*this, a, b);
910}
911
912template <typename T>
913inline void
914Matrix44<T>::setMul(const Self& a, const Mtx34& b)
915{
916 Matrix44CalcCommon<T>::multiply(*this, a, b);
917}
918
919template <typename T>
920inline void
922{
924}
925
926template <typename T>
927inline void
929{
931}
932
933template <typename T>
934inline void
936{
937 Matrix44CalcCommon<T>::makeQ(*this, q);
938}
939
940template <typename T>
941inline void
943{
944 Matrix44CalcCommon<T>::makeR(*this, r);
945}
946
947template <typename T>
948inline void
950{
951 Matrix44CalcCommon<T>::makeRIdx(*this, xr, yr, zr);
952}
953
954template <typename T>
955inline void
960
961template <typename T>
962inline void
964{
965 Matrix44CalcCommon<T>::toQuat(q, *this);
966}
967
968template <typename T>
969inline void
971{
972 Matrix44CalcCommon<T>::getCol(o, *this, axis);
973}
974
975template <typename T>
976inline Matrix44<T>::Vec4
978{
979 Vec4 o;
980 Matrix44CalcCommon<T>::getCol(o, *this, axis);
981 return o;
982}
983
984template <typename T>
985inline void
987{
988 Matrix44CalcCommon<T>::getRow(o, *this, row);
989}
990
991template <typename T>
992inline Matrix44<T>::Vec4
994{
995 Vec4 o;
996 Matrix44CalcCommon<T>::getRow(o, *this, row);
997 return o;
998}
999
1000template <typename T>
1001inline void
1006
1007template <typename T>
1008inline void
1010{
1011 Matrix44CalcCommon<T>::scaleBases(*this, sx, sy, sz, sw);
1012}
1013
1014template <typename T>
1015inline void
1017{
1018 Matrix44CalcCommon<T>::setCol(*this, axis, v);
1019}
1020
1021template <typename T>
1022inline void
1024{
1025 Matrix44CalcCommon<T>::setRow(*this, v, row);
1026}
1027
1028} // namespace sead
Definition seadAssert.h:44