Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateFromRotationMatrix()

static Quaternion System.Numerics.Quaternion.CreateFromRotationMatrix ( Matrix4x4 matrix)
inlinestatic

Definition at line 188 of file Quaternion.cs.

189 {
190 float num = matrix.M11 + matrix.M22 + matrix.M33;
191 Quaternion result = default(Quaternion);
192 if (num > 0f)
193 {
194 float num2 = MathF.Sqrt(num + 1f);
195 result.W = num2 * 0.5f;
196 num2 = 0.5f / num2;
197 result.X = (matrix.M23 - matrix.M32) * num2;
198 result.Y = (matrix.M31 - matrix.M13) * num2;
199 result.Z = (matrix.M12 - matrix.M21) * num2;
200 }
201 else if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
202 {
203 float num3 = MathF.Sqrt(1f + matrix.M11 - matrix.M22 - matrix.M33);
204 float num4 = 0.5f / num3;
205 result.X = 0.5f * num3;
206 result.Y = (matrix.M12 + matrix.M21) * num4;
207 result.Z = (matrix.M13 + matrix.M31) * num4;
208 result.W = (matrix.M23 - matrix.M32) * num4;
209 }
210 else if (matrix.M22 > matrix.M33)
211 {
212 float num5 = MathF.Sqrt(1f + matrix.M22 - matrix.M11 - matrix.M33);
213 float num6 = 0.5f / num5;
214 result.X = (matrix.M21 + matrix.M12) * num6;
215 result.Y = 0.5f * num5;
216 result.Z = (matrix.M32 + matrix.M23) * num6;
217 result.W = (matrix.M31 - matrix.M13) * num6;
218 }
219 else
220 {
221 float num7 = MathF.Sqrt(1f + matrix.M33 - matrix.M11 - matrix.M22);
222 float num8 = 0.5f / num7;
223 result.X = (matrix.M31 + matrix.M13) * num8;
224 result.Y = (matrix.M32 + matrix.M23) * num8;
225 result.Z = 0.5f * num7;
226 result.W = (matrix.M12 - matrix.M21) * num8;
227 }
228 return result;
229 }
Quaternion(float x, float y, float z, float w)
Definition Quaternion.cs:21

References System.Numerics.Matrix4x4.M11, System.Numerics.Matrix4x4.M12, System.Numerics.Matrix4x4.M13, System.Numerics.Matrix4x4.M21, System.Numerics.Matrix4x4.M22, System.Numerics.Matrix4x4.M23, System.Numerics.Matrix4x4.M31, System.Numerics.Matrix4x4.M32, System.Numerics.Matrix4x4.M33, and System.MathF.Sqrt().

Referenced by System.Numerics.Matrix4x4.Decompose().