@@ -21,21 +21,28 @@ namespace Siege
21
21
* @tparam T the type of numerical value stored by the matrix
22
22
* @param lhs the matrix on the left hand side of the operation
23
23
* @param rhs the matrix on the right hand side of the operation
24
+ * @param epsilon the tolerance level for the comparison
24
25
* @return a boolean specifying if they are equal within the given tolerance
25
26
*/
26
27
template <typename T>
27
- inline constexpr bool FEquals (const Mat<T, 4 , 4 >& lhs, const Mat<T, 4 , 4 >& rhs)
28
+ inline constexpr bool Equals (const Mat<T, 4 , 4 >& lhs, const Mat<T, 4 , 4 >& rhs, T epsilon = 0 )
28
29
{
29
- T epsilon = std::numeric_limits<T>::epsilon ();
30
-
31
- return (lhs[0 ][0 ] - rhs[0 ][0 ] <= epsilon) && (lhs[0 ][1 ] - rhs[0 ][1 ] <= epsilon) &&
32
- (lhs[0 ][2 ] - rhs[0 ][2 ] <= epsilon) && (lhs[0 ][3 ] - rhs[0 ][3 ] <= epsilon) &&
33
- (lhs[1 ][0 ] - rhs[1 ][0 ] <= epsilon) && (lhs[1 ][1 ] - rhs[1 ][1 ] <= epsilon) &&
34
- (lhs[1 ][2 ] - rhs[1 ][2 ] <= epsilon) && (lhs[1 ][3 ] - rhs[1 ][3 ] <= epsilon) &&
35
- (lhs[2 ][0 ] - rhs[2 ][0 ] <= epsilon) && (lhs[2 ][1 ] - rhs[2 ][1 ] <= epsilon) &&
36
- (lhs[2 ][2 ] - rhs[2 ][2 ] <= epsilon) && (lhs[2 ][3 ] - rhs[2 ][3 ] <= epsilon) &&
37
- (lhs[3 ][0 ] - rhs[3 ][0 ] <= epsilon) && (lhs[3 ][1 ] - rhs[3 ][1 ] <= epsilon) &&
38
- (lhs[3 ][2 ] - rhs[3 ][2 ] <= epsilon) && (lhs[3 ][3 ] - rhs[3 ][3 ] <= epsilon);
30
+ return (std::fabs (lhs[0 ][0 ] - rhs[0 ][0 ]) <= epsilon) &&
31
+ (std::fabs (lhs[0 ][1 ] - rhs[0 ][1 ]) <= epsilon) &&
32
+ (std::fabs (lhs[0 ][2 ] - rhs[0 ][2 ]) <= epsilon) &&
33
+ (std::fabs (lhs[0 ][3 ] - rhs[0 ][3 ]) <= epsilon) &&
34
+ (std::fabs (lhs[1 ][0 ] - rhs[1 ][0 ]) <= epsilon) &&
35
+ (std::fabs (lhs[1 ][1 ] - rhs[1 ][1 ]) <= epsilon) &&
36
+ (std::fabs (lhs[1 ][2 ] - rhs[1 ][2 ]) <= epsilon) &&
37
+ (std::fabs (lhs[1 ][3 ] - rhs[1 ][3 ]) <= epsilon) &&
38
+ (std::fabs (lhs[2 ][0 ] - rhs[2 ][0 ]) <= epsilon) &&
39
+ (std::fabs (lhs[2 ][1 ] - rhs[2 ][1 ]) <= epsilon) &&
40
+ (std::fabs (lhs[2 ][2 ] - rhs[2 ][2 ]) <= epsilon) &&
41
+ (std::fabs (lhs[2 ][3 ] - rhs[2 ][3 ]) <= epsilon) &&
42
+ (std::fabs (lhs[3 ][0 ] - rhs[3 ][0 ]) <= epsilon) &&
43
+ (std::fabs (lhs[3 ][1 ] - rhs[3 ][1 ]) <= epsilon) &&
44
+ (std::fabs (lhs[3 ][2 ] - rhs[3 ][2 ]) <= epsilon) &&
45
+ (std::fabs (lhs[3 ][3 ] - rhs[3 ][3 ]) <= epsilon);
39
46
}
40
47
41
48
/* *
@@ -44,18 +51,21 @@ inline constexpr bool FEquals(const Mat<T, 4, 4>& lhs, const Mat<T, 4, 4>& rhs)
44
51
* @tparam T the type of numerical value stored by the matrix
45
52
* @param lhs the matrix on the left hand side of the operation
46
53
* @param rhs the matrix on the right hand side of the operation
54
+ * @param epsilon the tolerance level for the comparison
47
55
* @return a boolean specifying if they are equal within the given tolerance
48
56
*/
49
57
template <typename T>
50
- inline constexpr bool FEquals (const Mat<T, 3 , 3 >& lhs, const Mat<T, 3 , 3 >& rhs)
58
+ inline constexpr bool Equals (const Mat<T, 3 , 3 >& lhs, const Mat<T, 3 , 3 >& rhs, T epsilon = 0 )
51
59
{
52
- T epsilon = std::numeric_limits<T>::epsilon ();
53
-
54
- return (lhs[0 ][0 ] - rhs[0 ][0 ] <= epsilon) && (lhs[0 ][1 ] - rhs[0 ][1 ] <= epsilon) &&
55
- (lhs[0 ][2 ] - rhs[0 ][2 ] <= epsilon) && (lhs[1 ][0 ] - rhs[1 ][0 ] <= epsilon) &&
56
- (lhs[1 ][1 ] - rhs[1 ][1 ] <= epsilon) && (lhs[1 ][2 ] - rhs[1 ][2 ] <= epsilon) &&
57
- (lhs[2 ][0 ] - rhs[2 ][0 ] <= epsilon) && (lhs[2 ][1 ] - rhs[2 ][1 ] <= epsilon) &&
58
- (lhs[2 ][2 ] - rhs[2 ][2 ] <= epsilon);
60
+ return (std::fabs (lhs[0 ][0 ] - rhs[0 ][0 ]) <= epsilon) &&
61
+ (std::fabs (lhs[0 ][1 ] - rhs[0 ][1 ]) <= epsilon) &&
62
+ (std::fabs (lhs[0 ][2 ] - rhs[0 ][2 ]) <= epsilon) &&
63
+ (std::fabs (lhs[1 ][0 ] - rhs[1 ][0 ]) <= epsilon) &&
64
+ (std::fabs (lhs[1 ][1 ] - rhs[1 ][1 ]) <= epsilon) &&
65
+ (std::fabs (lhs[1 ][2 ] - rhs[1 ][2 ]) <= epsilon) &&
66
+ (std::fabs (lhs[2 ][0 ] - rhs[2 ][0 ]) <= epsilon) &&
67
+ (std::fabs (lhs[2 ][1 ] - rhs[2 ][1 ]) <= epsilon) &&
68
+ (std::fabs (lhs[2 ][2 ] - rhs[2 ][2 ]) <= epsilon);
59
69
}
60
70
61
71
/* *
@@ -64,14 +74,16 @@ inline constexpr bool FEquals(const Mat<T, 3, 3>& lhs, const Mat<T, 3, 3>& rhs)
64
74
* @tparam T the type of numerical value stored by the matrix
65
75
* @param lhs the matrix on the left hand side of the operation
66
76
* @param rhs the matrix on the right hand side of the operation
77
+ * @param epsilon the tolerance level for the comparison
67
78
* @return a boolean specifying if they are equal within the given tolerance
68
79
*/
69
80
template <typename T>
70
- inline constexpr bool FEquals (const Mat<T, 2 , 2 >& lhs, const Mat<T, 2 , 2 >& rhs)
81
+ inline constexpr bool Equals (const Mat<T, 2 , 2 >& lhs, const Mat<T, 2 , 2 >& rhs, T epsilon = 0 )
71
82
{
72
- T epsilon = std::numeric_limits<T>::epsilon ();
73
- return (lhs[0 ][0 ] - rhs[0 ][0 ] <= epsilon) && (lhs[0 ][1 ] - rhs[0 ][1 ] <= epsilon) &&
74
- (lhs[1 ][0 ] - rhs[1 ][0 ] <= epsilon) && (lhs[1 ][1 ] - rhs[1 ][1 ] <= epsilon);
83
+ return (std::fabs (lhs[0 ][0 ] - rhs[0 ][0 ]) <= epsilon) &&
84
+ (std::fabs (lhs[0 ][1 ] - rhs[0 ][1 ]) <= epsilon) &&
85
+ (std::fabs (lhs[1 ][0 ] - rhs[1 ][0 ]) <= epsilon) &&
86
+ (std::fabs (lhs[1 ][1 ] - rhs[1 ][1 ]) <= epsilon);
75
87
}
76
88
} // namespace Siege
77
89
0 commit comments