Hi, Pardon for late reply on this thing but unfortunately didn't check code that time.
This is still not a check for orthogonal matrix, it's check for orthonormal matrix which is slight different things and current behavior/naming is confusing. I'd say either we need to rename function to make it reflect exactly what it's doing or change logic in which it's doing this. Also i wouldn't mind having both orthogonal and orthonormal checks. On Sat, Jan 28, 2012 at 10:31 AM, Lockal S <[email protected]> wrote: > Sorry for double posting, I'm not sure if the previous mail got to the > list. > > Old behavior: > Matrix(((0, 0, 10), (0, 20, 0), (0, 0, 0))).is_orthogonal returned > true, but this matrix is not orthogonal > > Matrix(((0, 0, 1, 42), (0, 1, 0, 0x42), (0, 0, 0, 100500), (-42, 42, > 0xDEAD, 0))).is_orthogonal also returned true (but this matrix is not > orthogonal) > > So as you can see m3 version completely ignored the main diagonal and > m4 version also ignored 4-th column and 4-th row. Now it works as it > described in Wikipedia and Wolfram MathWorld. > > At this moment orthogonality check is being used only one time in > blender (in draw_manipulator_rotate), and this one case seems to be a > real orthogonality check. > > Also it should not be a big problem with this "1", because floatval - > intval => floatval - (float)intval in C. > > - Sv. Lockal > > 2012/1/26 Campbell Barton <[email protected]>: > > Can you give an example as to what case this fixes? > > > > On Fri, Jan 27, 2012 at 4:11 AM, Sv. Lockal <[email protected]> > wrote: > >> 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]) > >> > >> _______________________________________________ > >> Bf-blender-cvs mailing list > >> [email protected] > >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs > > > > > > > > -- > > - Campbell > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers > -- With best regards, Sergey Sharybin _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
