I've needed to try and figure this one out too so here's my two cents and
some random matrices.

Since Blender uses column major order matrices these printouts are actually
"visually transposed" to normal math, actual matrix columns are shown
horizontally in the inner brackets and rows are vertical. So the 2.5 in a*b
((a*b)[2][0] -> column 2, row 0) is a result of dot produt (a row 0,  b
column 2) as it should be -> dot( (1.0, 0.0, 1.0, 0.0), (0.5, 1.0, 2.0, 0.0)
).

>>> a
Matrix((1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(1.0, 0.0, -1.0, 0.0),
(0.0, 0.0, 0.0, 1.0))

>>> b
Matrix((1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(0.5, 1.0, 2.0, 0.0),
(0.0, 0.0, 0.0, 1.0))

>>> a*b
Matrix((1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(2.5, 1.0, -2.0, 0.0),
(0.0, 0.0, 0.0, 1.0))

>>> b*a
Matrix((1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(0.5, -1.0, -2.0, 0.0),
(0.0, 0.0, 0.0, 1.0))

One nice thing about this is that the columns are the axises (0,1,2) and
translation (3) of a matrix, so a camera direction for example would be
-a[2][0:3].

2011/7/20 Campbell Barton <ideasma...@gmail.com>

> On Wed, Jul 20, 2011 at 3:37 PM, Scott Giese <scott.gi...@comcast.net>
> wrote:
> > Hi Gang,
> >
> >
> >
> > FYI. I submitted 3 patches for your review.  I'm new to the list and I
> > wanted to give back to the Blender community.
> >
> >
> >
> > 28030  SCONS Build: Build Date reflects
> > <
> http://projects.blender.org/tracker/index.php?func=detail&aid=28030&group_i
> > d=9&atid=127> "1" instead of actual date of build
> >
> > 28031  Minor typo in Blenlib
> > <
> http://projects.blender.org/tracker/index.php?func=detail&aid=28031&group_i
> > d=9&atid=127>
> >
> > 28032  Python Mathutils: Matrix Multiplication Error
> > <
> http://projects.blender.org/tracker/index.php?func=detail&aid=28032&group_i
> > d=9&atid=127>
> >
> >
> >
> > Great work guys!  Appreciate the great product.
> >
> >
> >
> > Scott
>
> Thanks for the fixes, committed all patches however you're changes to
> mathutils effectively only change the order of multiplication,
>
>
> http://projects.blender.org/tracker/index.php?func=detail&aid=28032&group_id=9&atid=127
>
> In you're example
> >>> print (m1 * m2)
>
> Change to...
> >>> print (m2 * m1)
>
> This is a bit confusing because in C we have
> mul_m4_m4m4(m1, m2);
>  which is the equivalent to "m2 * m1" in python.
>
> A while back Benoit Bolsee was concerned our matrix multiplication
> order was wrong so we switched it (between 2.4x and 2.5x)
>
> What makes you think the order in blender is wrong? what's you're
> reference?
>
> Just checked and we're currently doing matrix multiplication
> differently to numpy which doesn't bode well :S - test:
>
> # --- snip
> m1 = ((0.0, 0.0, 1.0, 0.0), (-1.0, 0.0, 0.0, 0.0), (0.0, -1.0, 0.0,
> 0.0), (0.6, 0.0, -0.05, 1.0))
> m2 = ((1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0,
> 0.0), (0.0, -0.02, -0.1, 1.0))
>
> from numpy import matrix
> n_m1 = matrix(m1)
> n_m2 = matrix(m2)
> print("\nnumpy\n%r" % (n_m1 * n_m2))
>
> from mathutils import Matrix
> b_m1 = Matrix(m1)
> b_m2 = Matrix(m2)
> print("\nmathutils\n%r" % (b_m1 * b_m2))
>
> # --- output
>
> numpy
> matrix([[ 0.  ,  0.  ,  1.  ,  0.  ],
>        [-1.  ,  0.  ,  0.  ,  0.  ],
>        [ 0.  , -1.  ,  0.  ,  0.  ],
>        [ 0.6 , -0.02, -0.15,  1.  ]])
>
> mathutils
> Matrix((0.0, 0.0, 1.0, 0.0),
>       (-1.0, 0.0, 0.0, 0.0),
>       (0.0, -1.0, 0.0, 0.0),
>       (0.62, 0.1, -0.05, 1.0))
>
>
> # --- switch m1/m2 order for both mathutils and numpy. re-run
>
> numpy
> matrix([[ 0.  ,  0.  ,  1.  ,  0.  ],
>        [-1.  ,  0.  ,  0.  ,  0.  ],
>        [ 0.  , -1.  ,  0.  ,  0.  ],
>        [ 0.62,  0.1 , -0.05,  1.  ]])
>
> mathutils
> Matrix((0.0, 0.0, 1.0, 0.0),
>       (-1.0, 0.0, 0.0, 0.0),
>       (0.0, -1.0, 0.0, 0.0),
>       (0.6, -0.0, -0.15, 1.0))
> _______________________________________________
> Bf-committers mailing list
> Bf-committers@blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to