-
Notifications
You must be signed in to change notification settings - Fork 4.5k
/
MathHelper.cs
73 lines (60 loc) · 2.38 KB
/
MathHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace System.Numerics
{
static class MathHelper
{
public const float Pi = (float)Math.PI;
public const float PiOver2 = Pi / 2f;
public const float PiOver4 = Pi / 4f;
// Angle conversion helper.
public static float ToRadians(float degrees)
{
return degrees * Pi / 180f;
}
// Comparison helpers with small tolerance to allow for floating point rounding during computations.
public static bool Equal(float a, float b)
{
return (Math.Abs(a - b) < 1e-5);
}
public static bool Equal(Vector2 a, Vector2 b)
{
return Equal(a.X, b.X) && Equal(a.Y, b.Y);
}
public static bool Equal(Vector3 a, Vector3 b)
{
return Equal(a.X, b.X) && Equal(a.Y, b.Y) && Equal(a.Z, b.Z);
}
public static bool Equal(Vector4 a, Vector4 b)
{
return Equal(a.X, b.X) && Equal(a.Y, b.Y) && Equal(a.Z, b.Z) && Equal(a.W, b.W);
}
public static bool Equal(Matrix4x4 a, Matrix4x4 b)
{
return
Equal(a.M11, b.M11) && Equal(a.M12, b.M12) && Equal(a.M13, b.M13) && Equal(a.M14, b.M14) &&
Equal(a.M21, b.M21) && Equal(a.M22, b.M22) && Equal(a.M23, b.M23) && Equal(a.M24, b.M24) &&
Equal(a.M31, b.M31) && Equal(a.M32, b.M32) && Equal(a.M33, b.M33) && Equal(a.M34, b.M34) &&
Equal(a.M41, b.M41) && Equal(a.M42, b.M42) && Equal(a.M43, b.M43) && Equal(a.M44, b.M44);
}
public static bool Equal(Matrix3x2 a, Matrix3x2 b)
{
return
Equal(a.M11, b.M11) && Equal(a.M12, b.M12) &&
Equal(a.M21, b.M21) && Equal(a.M22, b.M22) &&
Equal(a.M31, b.M31) && Equal(a.M32, b.M32);
}
public static bool Equal(Plane a, Plane b)
{
return Equal(a.Normal, b.Normal) && Equal(a.D, b.D);
}
public static bool Equal(Quaternion a, Quaternion b)
{
return Equal(a.X, b.X) && Equal(a.Y, b.Y) && Equal(a.Z, b.Z) && Equal(a.W, b.W);
}
public static bool EqualRotation(Quaternion a, Quaternion b)
{
return Equal(a, b) || Equal(a, -b);
}
}
}