Browse Source

don't be so fussy about nearly-singular matrices

David Rose 24 years ago
parent
commit
a03cf3ff2c
2 changed files with 10 additions and 2 deletions
  1. 5 1
      panda/src/linmath/lmatrix3_src.I
  2. 5 1
      panda/src/linmath/lmatrix4_src.cxx

+ 5 - 1
panda/src/linmath/lmatrix3_src.I

@@ -818,7 +818,11 @@ invert_from(const FLOATNAME(LMatrix3) &other) {
 
   FLOATTYPE other_det = MATRIX3_DETERMINANT(other._m.m);
 
-  if (IS_NEARLY_ZERO(other_det)) {
+  // We throw the value out only if it's smaller than our "small"
+  // threshold squared.  This helps reduce overly-sensitive
+  // rejections.
+  if (IS_THRESHOLD_ZERO(other_det, (NEARLY_ZERO(FLOATTYPE) * NEARLY_ZERO(FLOATTYPE)))) {
+    //    if (IS_NEARLY_ZERO(other_det)) {
 #ifdef NOTIFY_DEBUG
     linmath_cat.warning() << "Tried to invert singular LMatrix3.\n";
 #endif

+ 5 - 1
panda/src/linmath/lmatrix4_src.cxx

@@ -242,7 +242,11 @@ decompose_mat(int index[4]) {
       }
     }
 
-    if (IS_NEARLY_ZERO(big)) {
+    // We throw the value out only if it's smaller than our "small"
+    // threshold squared.  This helps reduce overly-sensitive
+    // rejections.
+    if (IS_THRESHOLD_ZERO(big, (NEARLY_ZERO(FLOATTYPE) * NEARLY_ZERO(FLOATTYPE)))) {
+      //    if (IS_NEARLY_ZERO(big)) {
       return false;
     }
     vv[i] = 1.0f / big;