[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43733] trunk/blender/source/blender/ blenlib/intern/math_matrix.c: Fix orthogonality check for mat3 and mat4

Sv. Lockal lockalsash at gmail.com
Thu Jan 26 18:11:45 CET 2012


Revision: 43733
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43733
Author:   lockal
Date:     2012-01-26 17:11:43 +0000 (Thu, 26 Jan 2012)
Log Message:
-----------
Fix orthogonality check for mat3 and mat4

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/math_matrix.c

Modified: trunk/blender/source/blender/blenlib/intern/math_matrix.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_matrix.c	2012-01-26 17:03:30 UTC (rev 43732)
+++ trunk/blender/source/blender/blenlib/intern/math_matrix.c	2012-01-26 17:11:43 UTC (rev 43733)
@@ -778,32 +778,38 @@
 	mul_v3_fl(mat[2], size[2]);
 }
 
-int is_orthogonal_m3(float mat[][3])
+int is_orthogonal_m3(float m[][3])
 {
-	if (fabsf(dot_v3v3(mat[0], mat[1])) > 1.5f * FLT_EPSILON)
-		return 0;
+    int i, j;
 
-	if (fabsf(dot_v3v3(mat[1], mat[2])) > 1.5f * FLT_EPSILON)
-		return 0;
+    for (i = 0; i < 3; i++) {
+        for (j = 0; j < i; j++) {
+            if (fabsf(dot_v3v3(m[i], m[j])) > 1.5f * FLT_EPSILON)
+                return 0;
+        }
 
-	if (fabsf(dot_v3v3(mat[0], mat[2])) > 1.5f * FLT_EPSILON)
-		return 0;
-	
-	return 1;
+        if (fabsf(dot_v3v3(m[i], m[i]) - 1) > 1.5f * FLT_EPSILON)
+            return 0;
+    }
+
+    return 1;
 }
 
-int is_orthogonal_m4(float mat[][4])
+int is_orthogonal_m4(float m[][4])
 {
-	if (fabsf(dot_v3v3(mat[0], mat[1])) > 1.5f * FLT_EPSILON)
-		return 0;
+    int i, j;
 
-	if (fabsf(dot_v3v3(mat[1], mat[2])) > 1.5f * FLT_EPSILON)
-		return 0;
+    for (i = 0; i < 4; i++) {
+        for (j = 0; j < i; j++) {
+            if (fabsf(dot_vn_vn(m[i], m[j], 4)) > 1.5f * FLT_EPSILON)
+                return 0;
+        }
 
-	if (fabsf(dot_v3v3(mat[0], mat[2])) > 1.5f * FLT_EPSILON)
-		return 0;
-	
-	return 1;
+        if (fabsf(dot_vn_vn(m[i], m[i], 4) - 1) > 1.5f * FLT_EPSILON)
+            return 0;
+    }
+
+    return 1;
 }
 
 void normalize_m3(float mat[][3])




More information about the Bf-blender-cvs mailing list