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 Matrix34CalcCommon<T>::makeR(*this, r);
419}
420
421template <typename T>
422inline void
424{
425 Matrix34CalcCommon<T>::makeRIdx(*this, xr, yr, zr);
426}
427
428template <typename T>
429inline void
430Matrix34<T>::makeRT(const Vec3& r, const Vec3& t)
431{
432 Matrix34CalcCommon<T>::makeRT(*this, r, t);
433}
434
435template <typename T>
436inline void
437Matrix34<T>::makeRTIdx(const Vector3<u32>& r, const Vec3& t)
438{
439 Matrix34CalcCommon<T>::makeRTIdx(*this, r, t);
440}
441
442template <typename T>
443inline void
448
449template <typename T>
450inline void
452{
453 Matrix34CalcCommon<T>::makeRzxyIdx(*this, r.x, r.y, r.z);
454}
455
456template <typename T>
457inline void
459{
461}
462
463template <typename T>
464inline void
466{
467 Matrix34CalcCommon<T>::makeS(*this, s);
468}
469
470template <typename T>
471inline void
473{
474 Vec3 s(x, y, z);
475 Matrix34CalcCommon<T>::makeS(*this, s);
476}
477
478template <typename T>
479inline void
480Matrix34<T>::makeSR(const Vec3& s, const Vec3& r)
481{
482 Matrix34CalcCommon<T>::makeSR(*this, s, r);
483}
484
485template <typename T>
486inline void
487Matrix34<T>::makeSRIdx(const Vec3& s, const Vector3<u32>& r)
488{
489 Matrix34CalcCommon<T>::makeSRIdx(*this, s, r);
490}
491
492template <typename T>
493inline void
494Matrix34<T>::makeSRT(const Vec3& s, const Vec3& r, const Vec3& t)
495{
496 Matrix34CalcCommon<T>::makeSRT(*this, s, r, t);
497}
498
499template <typename T>
500inline void
501Matrix34<T>::makeSRTIdx(const Vec3& s, const Vector3<u32>& r, const Vec3& t)
502{
503 Matrix34CalcCommon<T>::makeSRTIdx(*this, s, r, t);
504}
505
506template <typename T>
507inline void
509{
511}
512
513template <typename T>
514inline void
515Matrix34<T>::makeSRzxyTIdx(const Vec3& s, const Vector3<u32>& r, const Vec3& t)
516{
518}
519
520template <typename T>
521inline void
522Matrix34<T>::makeST(const Vec3& s, const Vec3& t)
523{
524 Matrix34CalcCommon<T>::makeST(*this, s, t);
525}
526
527template <typename T>
528inline void
530{
531 Matrix34CalcCommon<T>::makeT(*this, t);
532}
533
534template <typename T>
535inline void
537{
538 Vec3 t(x, y, z);
539 Matrix34CalcCommon<T>::makeT(*this, t);
540}
541
542template <typename T>
543inline void
545{
546 Matrix34CalcCommon<T>::toQuat(q, *this);
547}
548
549template <typename T>
550inline void
552{
553 Matrix34CalcCommon<T>::multScaleLocal(*this, *this, s);
554}
555
556template <typename T>
557inline void
559{
561}
562
563template <typename T>
564inline void
569
570template <typename T>
571inline void
576
577template <typename T>
578inline void
580{
581 Matrix34CalcCommon<T>::multScaleWorld(*this, s, *this);
582}
583
584template <typename T>
585inline void
587{
588 Matrix34CalcCommon<T>::multScaleWorld(*this, Vec3(x, y, z), *this);
589}
590
591#ifdef cafe
592
593template <>
594inline void
599
600#endif // cafe
601
602template <typename T>
603inline void
605{
607}
608
609template <typename T>
610inline void
612{
614}
615
616#ifdef cafe
617
618template <>
619inline void
621{
622 ASM_MTXScaleApply(const_cast<f32(*)[4]>(n.m), m, x, y, z);
623}
624
625#endif // cafe
626
627template <typename T>
628inline void
633
634template <typename T>
635inline void
640
641#ifdef cafe
642
643template <>
644inline void
649
650#endif // cafe
651
652template <typename T>
653inline void
658
659template <typename T>
660inline void
665
666#ifdef cafe
667
668template <>
669inline void
671{
672 ASM_MTXTransApply(const_cast<f32(*)[4]>(n.m), m, x, y, z);
673}
674
675#endif // cafe
676
677template <typename T>
678inline void
680{
681 Matrix34CalcCommon<T>::getBase(o, *this, axis);
682}
683
684template <typename T>
685inline Matrix34<T>::Vec3
687{
688 Vec3 o;
689 Matrix34CalcCommon<T>::getBase(o, *this, axis);
690 return o;
691}
692
693template <typename T>
694inline void
696{
697 Matrix34CalcCommon<T>::getRow(o, *this, row);
698}
699
700template <typename T>
701inline Matrix34<T>::Vec4
703{
704 Vec4 o;
705 Matrix34CalcCommon<T>::getRow(o, *this, row);
706 return o;
707}
708
709template <typename T>
710inline void
712{
714}
715
716template <typename T>
717inline Matrix34<T>::Vec3
719{
720 Vec3 o;
722 return o;
723}
724
725template <typename T>
726inline void
731
732template <typename T>
733inline void
735{
736 Matrix34CalcCommon<T>::scaleBases(*this, s, s, s);
737}
738
739template <typename T>
740inline void
742{
744}
745
746template <typename T>
747inline void
749{
750 Matrix34CalcCommon<T>::scaleBases(*this, s.x, s.y, s.z);
751}
752
753template <typename T>
754inline void
756{
757 Matrix34CalcCommon<T>::setBase(*this, axis, v);
758}
759
760template <typename T>
761inline void
763{
764 Matrix34CalcCommon<T>::setRow(*this, v, row);
765}
766
767template <typename T>
768inline void
770{
772}
773
774template <typename T>
775inline void
777{
778 Vec3 t(x, y, z);
780}
781
782template <typename T>
783inline
785 T a00, T a01, T a02, T a03,
786 T a10, T a11, T a12, T a13,
787 T a20, T a21, T a22, T a23,
788 T a30, T a31, T a32, T a33
789)
790{
791 this->m[0][0] = a00;
792 this->m[0][1] = a01;
793 this->m[0][2] = a02;
794 this->m[0][3] = a03;
795
796 this->m[1][0] = a10;
797 this->m[1][1] = a11;
798 this->m[1][2] = a12;
799 this->m[1][3] = a13;
800
801 this->m[2][0] = a20;
802 this->m[2][1] = a21;
803 this->m[2][2] = a22;
804 this->m[2][3] = a23;
805
806 this->m[3][0] = a30;
807 this->m[3][1] = a31;
808 this->m[3][2] = a32;
809 this->m[3][3] = a33;
810}
811
812template <typename T>
813inline
814Matrix44<T>::Matrix44(const Mtx33& mtx33, const Vec3& t, const Vec4& vw)
815{
816 Matrix44CalcCommon<T>::copy(*this, mtx33, t, vw);
817}
818
819template <typename T>
820inline
822{
823 Matrix44CalcCommon<T>::copy(*this, mtx34, vw);
824}
825
826template <typename T>
827inline T
829{
830 return this->m[i][j];
831}
832
833template <typename T>
834inline T&
836{
837 return this->m[i][j];
838}
839
840template <typename T>
841inline Matrix44<T>&
843{
844 Matrix44CalcCommon<T>::copy(*this, n);
845 return *this;
846}
847
848template <typename T>
849inline void
854
855template <typename T>
856inline void
861
862template <typename T>
863inline void
865{
866 Matrix44CalcCommon<T>::inverse(*this, n);
867}
868
869template <typename T>
870inline void
871Matrix44<T>::setMul(const Self& a, const Self& b)
872{
873 Matrix44CalcCommon<T>::multiply(*this, a, b);
874}
875
876template <typename T>
877inline void
878Matrix44<T>::setMul(const Mtx34& a, const Self& b)
879{
880 Matrix44CalcCommon<T>::multiply(*this, a, b);
881}
882
883template <typename T>
884inline void
885Matrix44<T>::setMul(const Self& a, const Mtx34& b)
886{
887 Matrix44CalcCommon<T>::multiply(*this, a, b);
888}
889
890template <typename T>
891inline void
893{
895}
896
897template <typename T>
898inline void
900{
902}
903
904template <typename T>
905inline void
907{
908 Matrix44CalcCommon<T>::makeQ(*this, q);
909}
910
911template <typename T>
912inline void
914{
915 Matrix44CalcCommon<T>::makeR(*this, r);
916}
917
918template <typename T>
919inline void
921{
922 Matrix44CalcCommon<T>::makeRIdx(*this, xr, yr, zr);
923}
924
925template <typename T>
926inline void
931
932template <typename T>
933inline void
935{
936 Matrix44CalcCommon<T>::toQuat(q, *this);
937}
938
939template <typename T>
940inline void
942{
943 Matrix44CalcCommon<T>::getCol(o, *this, axis);
944}
945
946template <typename T>
947inline Matrix44<T>::Vec4
949{
950 Vec4 o;
951 Matrix44CalcCommon<T>::getCol(o, *this, axis);
952 return o;
953}
954
955template <typename T>
956inline void
958{
959 Matrix44CalcCommon<T>::getRow(o, *this, row);
960}
961
962template <typename T>
963inline Matrix44<T>::Vec4
965{
966 Vec4 o;
967 Matrix44CalcCommon<T>::getRow(o, *this, row);
968 return o;
969}
970
971template <typename T>
972inline void
977
978template <typename T>
979inline void
981{
982 Matrix44CalcCommon<T>::scaleBases(*this, sx, sy, sz, sw);
983}
984
985template <typename T>
986inline void
988{
989 Matrix44CalcCommon<T>::setCol(*this, axis, v);
990}
991
992template <typename T>
993inline void
995{
996 Matrix44CalcCommon<T>::setRow(*this, v, row);
997}
998
999} // namespace sead
Definition seadAssert.h:44