Does anyone know of a functional Matrix math class for ruby that could multiply, add and substract 3x2 or larger matrices. The matrix.rb that is in Ruby API cannot multiply anything larger than 2x2 matrices, which makes it useless for 2D or 3D graphics (for instance). SP

on 2006-12-21 13:42

on 2006-12-21 13:50

On 12/21/06, seepee <see@pee.org> wrote: > Does anyone know of a functional Matrix math class for ruby that could > multiply, add and substract 3x2 or larger matrices. > > The matrix.rb that is in Ruby API cannot multiply anything larger than 2x2 > matrices, which makes it useless for 2D or 3D graphics (for instance). > Are you sure? $ irb irb(main):001:0> Matrix[[1,2,3],[1,2,3],[1,2,3]] * Matrix[[1,2,3],[1,2,3],[1,2,3]] => Matrix[[6, 12, 18], [6, 12, 18], [6, 12, 18]] irb(main):002:0> VERSION => 1.8.4 $

on 2006-12-21 14:26

seepee wrote: > Does anyone know of a functional Matrix math class for ruby that could > multiply, add and substract 3x2 or larger matrices. > > The matrix.rb that is in Ruby API cannot multiply anything larger than 2x2 > matrices, which makes it useless for 2D or 3D graphics (for instance). OK, I understand now: you want graphical transformations. They are *not* real matrices, but the combination of a real matrix and a translation vector. So you need special rules to combine them (although for additions and substractions, standard matrix multiplications should work). I don't know any package doing that in Ruby -- but if you consider writing one, that would definitely be an interesting addition. Cheers ! Vince

on 2006-12-21 16:30

On Dec 21, 2006, at 6:24 AM, Vincent Fourmond wrote: > translation vector. So you need special rules to combine them (although > for additions and substractions, standard matrix multiplications should > work). I don't know any package doing that in Ruby -- but if you > consider writing one, that would definitely be an interesting addition. > An RST matrix has an implicit 0 0 0 1 row along the bottom. Nothing more complicated than that. Actually when dealing with projection matrices, this 'implicit' bottom row gets used to define the perspective value of the camera. That said, matrix.rb is very shoddy - it's missing several important vector operations (like, oh, -Vector and Vector/Numeric), and it uses Vector*Matrix instead of the correct Matrix*Vector. Dan

on 2006-12-21 16:54

Dan Uznanski wrote: >> > Actually when dealing with projection matrices, this 'implicit' bottom > row gets used to define the perspective value of the camera. > > That said, matrix.rb is very shoddy - it's missing several important > vector operations (like, oh, -Vector and Vector/Numeric), and it uses > Vector*Matrix instead of the correct Matrix*Vector. > > Dan > > > I wouldn't call it "shoddy". My biggest complaint with Matrix is that a Matrix is immutable -- if you want to set elements, you have to do so in an Array and then create a new Matrix from the Array. The whole rational / complex / matrix / mathn collection looks to me like an attempt to provide "high-school algebra" constructs in Ruby that work the way you'd expect them to work. For example, you can get the *exact* inverse of a non-singular matrix with rational elements, and I suppose, though I haven't tried it, the same thing for a non-singular matrix with complex rational elements. For *small* one-off calculations and calculations where high speed isn't required, they do just that. However, if what you want to do is, say, lots of graphical transformations at high speed using floating point arithmetic, like you might in a video game, you want NArray. -- M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P) http://borasky-research.blogspot.com/ If God had meant for carrots to be eaten cooked, He would have given rabbits fire.