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

◆ CreateFromRotationMatrix() [2/2]

static void Microsoft.Xna.Framework.Quaternion.CreateFromRotationMatrix ( ref Matrix matrix,
out Quaternion result )
inlinestatic

Definition at line 268 of file Quaternion.cs.

269 {
270 float num = matrix.M11 + matrix.M22 + matrix.M33;
271 if (num > 0f)
272 {
273 float num2 = (float)Math.Sqrt(num + 1f);
274 result.W = num2 * 0.5f;
275 num2 = 0.5f / num2;
276 result.X = (matrix.M23 - matrix.M32) * num2;
277 result.Y = (matrix.M31 - matrix.M13) * num2;
278 result.Z = (matrix.M12 - matrix.M21) * num2;
279 }
280 else if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
281 {
282 float num3 = (float)Math.Sqrt(1f + matrix.M11 - matrix.M22 - matrix.M33);
283 float num4 = 0.5f / num3;
284 result.X = 0.5f * num3;
285 result.Y = (matrix.M12 + matrix.M21) * num4;
286 result.Z = (matrix.M13 + matrix.M31) * num4;
287 result.W = (matrix.M23 - matrix.M32) * num4;
288 }
289 else if (matrix.M22 > matrix.M33)
290 {
291 float num5 = (float)Math.Sqrt(1f + matrix.M22 - matrix.M11 - matrix.M33);
292 float num6 = 0.5f / num5;
293 result.X = (matrix.M21 + matrix.M12) * num6;
294 result.Y = 0.5f * num5;
295 result.Z = (matrix.M32 + matrix.M23) * num6;
296 result.W = (matrix.M31 - matrix.M13) * num6;
297 }
298 else
299 {
300 float num7 = (float)Math.Sqrt(1f + matrix.M33 - matrix.M11 - matrix.M22);
301 float num8 = 0.5f / num7;
302 result.X = (matrix.M31 + matrix.M13) * num8;
303 result.Y = (matrix.M32 + matrix.M23) * num8;
304 result.Z = 0.5f * num7;
305 result.W = (matrix.M12 - matrix.M21) * num8;
306 }
307 }
static double Sqrt(double d)

References System.Math.Sqrt().