@@ -14,7 +14,7 @@ namespace FixedMathSharp.Geometry;
1414internal static class WideRigidProjection
1515{
1616 internal static WideAxis3 TransformLocalAxis (
17- WideRationalBasis3d basis ,
17+ in WideRationalBasis3d basis ,
1818 Signed192 localX ,
1919 Signed192 localY ,
2020 Signed192 localZ ) =>
@@ -35,7 +35,7 @@ internal static WideAxis3 TransformLocalAxis(
3535 /// keeps each transformed component within <see cref="Signed320"/>.
3636 /// </summary>
3737 internal static WideAxis3 TransformLocalTriangleNormalCrossEdgeAxis (
38- WideRationalBasis3d basis ,
38+ in WideRationalBasis3d basis ,
3939 Signed320 localX ,
4040 Signed320 localY ,
4141 Signed320 localZ ) =>
@@ -50,29 +50,75 @@ internal static WideAxis3 TransformLocalTriangleNormalCrossEdgeAxis(
5050 localX , localY , localZ ,
5151 basis . Xz , basis . Yz , basis . Zz ) ) ;
5252
53- internal static Signed576 GetTransformedLocalOffsetProjection (
53+ internal static void GetLocalAxisProjections (
54+ in WideAxis3 axis ,
55+ in WideRationalBasis3d basis ,
56+ out Signed576 x ,
57+ out Signed576 y ,
58+ out Signed576 z )
59+ {
60+ x = GetBasisAxisProjection (
61+ axis ,
62+ basis . Xx ,
63+ basis . Xy ,
64+ basis . Xz ) ;
65+ y = GetBasisAxisProjection (
66+ axis ,
67+ basis . Yx ,
68+ basis . Yy ,
69+ basis . Yz ) ;
70+ z = GetBasisAxisProjection (
71+ axis ,
72+ basis . Zx ,
73+ basis . Zy ,
74+ basis . Zz ) ;
75+ }
76+
77+ internal static Signed576 GetLocalOffsetProjection (
5478 Vector3d localOffset ,
55- WideRationalBasis3d basis ,
56- WideAxis3 axis ) =>
79+ in Signed576 axisX ,
80+ in Signed576 axisY ,
81+ in Signed576 axisZ ) =>
5782 WideArithmetic . AddSigned576 (
5883 WideArithmetic . AddSigned576 (
5984 WideArithmetic . MultiplySigned576 (
60- GetBasisAxisProjection (
61- axis , basis . Xx , basis . Xy , basis . Xz ) ,
62- Signed192 . Raw ( localOffset . X ) ) ,
85+ axisX ,
86+ localOffset . X . m_rawValue ) ,
6387 WideArithmetic . MultiplySigned576 (
64- GetBasisAxisProjection (
65- axis , basis . Yx , basis . Yy , basis . Yz ) ,
66- Signed192 . Raw ( localOffset . Y ) ) ) ,
88+ axisY ,
89+ localOffset . Y . m_rawValue ) ) ,
6790 WideArithmetic . MultiplySigned576 (
68- GetBasisAxisProjection (
69- axis , basis . Zx , basis . Zy , basis . Zz ) ,
70- Signed192 . Raw ( localOffset . Z ) ) ) ;
91+ axisZ ,
92+ localOffset . Z . m_rawValue ) ) ;
93+
94+ internal static void TransformLocalAxis (
95+ in WideRationalBasis3d basis ,
96+ in WideAxis3 localAxis ,
97+ out Signed576 x ,
98+ out Signed576 y ,
99+ out Signed576 z )
100+ {
101+ x = TransformLocalAxisComponent (
102+ localAxis ,
103+ basis . Xx ,
104+ basis . Yx ,
105+ basis . Zx ) ;
106+ y = TransformLocalAxisComponent (
107+ localAxis ,
108+ basis . Xy ,
109+ basis . Yy ,
110+ basis . Zy ) ;
111+ z = TransformLocalAxisComponent (
112+ localAxis ,
113+ basis . Xz ,
114+ basis . Yz ,
115+ basis . Zz ) ;
116+ }
71117
72118 internal static Signed576 GetWorldOriginDifferenceProjection (
73119 Vector3d end ,
74120 Vector3d start ,
75- WideAxis3 axis ) =>
121+ in WideAxis3 axis ) =>
76122 WideArithmetic . AddSigned576 (
77123 WideArithmetic . AddSigned576 (
78124 WideArithmetic . MultiplySigned320 (
@@ -92,7 +138,7 @@ internal static Signed576 GetWorldOriginDifferenceProjection(
92138 axis . Z ) ) ;
93139
94140 internal static Signed576 GetBasisAxisProjection (
95- WideAxis3 axis ,
141+ in WideAxis3 axis ,
96142 Signed192 basisX ,
97143 Signed192 basisY ,
98144 Signed192 basisZ ) =>
@@ -109,7 +155,7 @@ internal static Signed576 GetBasisAxisProjection(
109155 basisZ ) ) ;
110156
111157 internal static void IncludeProjection (
112- Signed576 candidate ,
158+ in Signed576 candidate ,
113159 ref Signed576 minimum ,
114160 ref Signed576 maximum )
115161 {
@@ -153,4 +199,21 @@ private static Signed320 TransformLocalTriangleNormalCrossEdgeComponent(
153199 basisZ ) ) ;
154200 return Signed320 . NarrowValue ( transformed ) ;
155201 }
202+
203+ private static Signed576 TransformLocalAxisComponent (
204+ in WideAxis3 localAxis ,
205+ Signed192 basisX ,
206+ Signed192 basisY ,
207+ Signed192 basisZ ) =>
208+ WideArithmetic . AddSigned576 (
209+ WideArithmetic . AddSigned576 (
210+ WideArithmetic . MultiplySigned576 (
211+ Signed576 . ExtendValue ( localAxis . X ) ,
212+ basisX ) ,
213+ WideArithmetic . MultiplySigned576 (
214+ Signed576 . ExtendValue ( localAxis . Y ) ,
215+ basisY ) ) ,
216+ WideArithmetic . MultiplySigned576 (
217+ Signed576 . ExtendValue ( localAxis . Z ) ,
218+ basisZ ) ) ;
156219}
0 commit comments