[Bf-committers] matrix multiplication in Blender SVN of this morning (W32 Vista mingw compiled)
Benoit Bolsee
benoit.bolsee at online.be
Wed Jul 27 12:47:37 CEST 2011
Hi, I repeat once more: mathutils matrices are COLUMN-MAJOR. This means
that the top elements in the definition list are columns, not rows,
despite the fact that they are printed horizontaly. So the following
code:
m1 = Matrix([[ 1, 0, 2], [-1, 3, 1]])
m2 = Matrix([[3, 1],[2, 1],[1, 0]])
print(m1*m2)
Translates into this in ordinary notation:
(1 -1) X (3 2 1) = (2 1 1)
(0 3) (1 1 0) (3 3 0)
(2 1) (7 5 2)
Which is exactly what blender returns.
Mathutils matrices are column-major because that's how Blender stores
the matrices internal, and Blender uses that convention because openGL
uses it.
> -----Original Message-----
> From: bf-committers-bounces at blender.org
> [mailto:bf-committers-bounces at blender.org] On Behalf Of
> bf-committers-request at blender.org
> Sent: mercredi 27 juillet 2011 12:00
> To: bf-committers at blender.org
> Subject: Bf-committers Digest, Vol 84, Issue 26
On Tue, 26 Jul 2011 16:49:54 +0200, "Peter K.H. Gragert"
<pkhgragert at gmail.com> wrote:
>
> Hallo,
> First try ...
>
> Put this text in the console and run it
> ============code start=============
> import bpy
> from mathutils import Matrix
> print("\n----START---")
> m1 = Matrix([[ 1, 0, 2],
> [-1, 3, 1]])
> print(m1, "\nelement R(2,3)")
>
> m2 = Matrix([[3, 1],
> [2, 1],
> [1, 0]])
> print(m2, "\nelement R(3,2)")
>
> print("m1 * m2 =", m1*m2, " should be element R(2,3) * R(3,2)
> => R(2,2) but is R(3,3) so math it looks like m2 * m1 so it
> is STRANGE!")
>
> print("m2*m1 = ", m2*m1, " should be element R(3,2) * R( 2,3)
> => R(3,3) but is R(2,2) so math it looks like m1 *
> m2,(consistantly) STRANGE")
>
> # checking what *= means
> m1_Copy = m1.copy()
> m1_Copy *= m2
> m1_BlStar_m2 = m1_Copy
> print("m1 BLender *= m2", m1_BlStar_m2 ,"should be element
> dependant of what *= means , right or left multiplication")
> print("result shows it is interpretated as math: m1 * m2,
> \n\n ==> so math RIGHT multiplication!")
> print( "check:", m1 * m2 == m1_BlStar_m2 )
> print("\n+++++++++++++ now again?!!??? ")
> m1_BlStarm_m2_Copy = m1_BlStar_m2.copy()
> m1_BlStarm_m2_Copy *= m2
> m1_BlStar_m2_BlStar_m2 = m1_BlStarm_m2_Copy
> print(" m1 BlStar_m2_BlStar_m2 =\n", m1_BlStar_m2_BlStar_m2,
> "\nshould be ERROR R(3,3) * R(3,2) => R(3,2) but is R(3,3) ERROR!")
>
> ============code end=============
>
>
> ==> matrix multiplication is NOT like math matrix multiblication
>
> m1 * m2 in Blender correspondent with m2 * m1 in math
> (STRANGE not nice .... but ... let it be so)
>
> But THEN *=
> m2 *= m1 behaves very strange and to my opinion wrong!
>
> Greetings
> Peter K.H. Gragert
>
More information about the Bf-committers
mailing list