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

◆ CreateFromRotationMatrix() [1/2]

static Quaternion Microsoft.Xna.Framework.Quaternion.CreateFromRotationMatrix ( Matrix matrix)
inlinestatic

Definition at line 225 of file Quaternion.cs.

226 {
227 float num = matrix.M11 + matrix.M22 + matrix.M33;
228 Quaternion result = default(Quaternion);
229 if (num > 0f)
230 {
231 float num2 = (float)Math.Sqrt(num + 1f);
232 result.W = num2 * 0.5f;
233 num2 = 0.5f / num2;
234 result.X = (matrix.M23 - matrix.M32) * num2;
235 result.Y = (matrix.M31 - matrix.M13) * num2;
236 result.Z = (matrix.M12 - matrix.M21) * num2;
237 }
238 else if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
239 {
240 float num3 = (float)Math.Sqrt(1f + matrix.M11 - matrix.M22 - matrix.M33);
241 float num4 = 0.5f / num3;
242 result.X = 0.5f * num3;
243 result.Y = (matrix.M12 + matrix.M21) * num4;
244 result.Z = (matrix.M13 + matrix.M31) * num4;
245 result.W = (matrix.M23 - matrix.M32) * num4;
246 }
247 else if (matrix.M22 > matrix.M33)
248 {
249 float num5 = (float)Math.Sqrt(1f + matrix.M22 - matrix.M11 - matrix.M33);
250 float num6 = 0.5f / num5;
251 result.X = (matrix.M21 + matrix.M12) * num6;
252 result.Y = 0.5f * num5;
253 result.Z = (matrix.M32 + matrix.M23) * num6;
254 result.W = (matrix.M31 - matrix.M13) * num6;
255 }
256 else
257 {
258 float num7 = (float)Math.Sqrt(1f + matrix.M33 - matrix.M11 - matrix.M22);
259 float num8 = 0.5f / num7;
260 result.X = (matrix.M31 + matrix.M13) * num8;
261 result.Y = (matrix.M32 + matrix.M23) * num8;
262 result.Z = 0.5f * num7;
263 result.W = (matrix.M12 - matrix.M21) * num8;
264 }
265 return result;
266 }
static double Sqrt(double d)
Quaternion(float x, float y, float z, float w)
Definition Quaternion.cs:29

References Microsoft.Xna.Framework.Matrix.M11, Microsoft.Xna.Framework.Matrix.M12, Microsoft.Xna.Framework.Matrix.M13, Microsoft.Xna.Framework.Matrix.M21, Microsoft.Xna.Framework.Matrix.M22, Microsoft.Xna.Framework.Matrix.M23, Microsoft.Xna.Framework.Matrix.M31, Microsoft.Xna.Framework.Matrix.M32, Microsoft.Xna.Framework.Matrix.M33, and System.Math.Sqrt().

Referenced by Microsoft.Xna.Framework.Matrix.Decompose().