[#144186] Re: array of object insert polices — "Pe, Botp" <botp@...>

dave [mailto:dave.m@email.it] wrote:

14 messages 2005/06/01

[#144206] Implementing a Read-Only array — Gavin Kistner <gavin@...>

Right up front, let me say that I realize that I can't prevent

14 messages 2005/06/01

[#144224] Method Chaining Issues — "aartist" <aartist@...>

try this:

28 messages 2005/06/01
[#144231] Re: Method Chaining Issues — "Phrogz" <gavin@...> 2005/06/01

This is a FAQ, though no page on the RubyGarden wiki seems to address

[#144240] Re: Method Chaining Issues — Nikolai Weibull <mailing-lists.ruby-talk@...> 2005/06/01

Phrogz wrote:

[#144230] ternary operator confusion — Belorion <belorion@...>

I don't know if this is "improper" use of the ternary operator, but I

19 messages 2005/06/01
[#144233] Re: ternary operator confusion — "Phrogz" <gavin@...> 2005/06/01

true ? a.push(1) : a.push(2)

[#144257] Re: ternary operator confusion — "Marcel Molina Jr." <marcel@...> 2005/06/01

On Thu, Jun 02, 2005 at 01:40:23AM +0900, Phrogz wrote:

[#144263] Re: ternary operator confusion — Eric Mahurin <eric_mahurin@...> 2005/06/01

--- "Marcel Molina Jr." <marcel@vernix.org> wrote:

[#144453] RubyScript2Exe and GUI toolkits — Erik Veenstra <pan@...>

13 messages 2005/06/03

[#144487] Building a business case for Ruby — Joe Van Dyk <joevandyk@...>

Hi,

29 messages 2005/06/03

[#144535] ruby-dev summary 26128-26222 — Minero Aoki <aamine@...>

Hi all,

11 messages 2005/06/04

[#144579] Package, a future replacement for setup.rb and mkmf.rb — Christian Neukirchen <chneukirchen@...>

29 messages 2005/06/04

[#144672] newbie read.scan (?) question — "Bruce D'Arcus" <bdarcus.lists@...>

Hi,

16 messages 2005/06/06

[#144691] making a duck — Eric Mahurin <eric_mahurin@...>

Regarding duck-typing... Is there an easy way make a "duck"?

27 messages 2005/06/06

[#144867] ruby-wish@ruby-lang.org mailing list — dave <dave.m@...>

19 messages 2005/06/08
[#144870] Re: [PROPOSAL] ruby-wish@ruby-lang.org mailing list — "Robert Klemme" <bob.news@...> 2005/06/08

Austin Ziegler wrote:

[#144890] RubyStuff: The Ruby Shop for Ruby Programmers — James Britt <james_b@...>

Announcing the formal grand opening of Ruby Stuff: The Ruby Shop for

36 messages 2005/06/08

[#144966] python/ruby benchmark. — "\"</script>" <groleo@...>

I took a look at

78 messages 2005/06/09
[#144967] Re: python/ruby benchmark. — gabriele renzi <surrender_it@...> 2005/06/09

"</script> ha scritto:

[#144974] Re: python/ruby benchmark. — Lothar Scholz <mailinglists@...> 2005/06/09

Hello gabriele,

[#144977] Re: python/ruby benchmark. — Kent Sibilev <ksruby@...> 2005/06/09

Java is an order of magnitude faster than Ruby. The development of a

[#144980] Re: python/ruby benchmark. — Lothar Scholz <mailinglists@...> 2005/06/09

Hello Kent,

[#144983] Re: python/ruby benchmark. — "Ryan Leavengood" <mrcode@...> 2005/06/09

Lothar Scholz said:

[#145196] Re: python/ruby benchmark(don't shoot the messenger) — ptkwt@... (Phil Tomson) 2005/06/12

In article <9e7db91105061106485b68d629@mail.gmail.com>,

[#145207] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Phil Tomson wrote:

[#145212] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/12

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145219] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Austin Ziegler wrote:

[#145223] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/12

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145240] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Austin Ziegler wrote:

[#145241] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/13

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145000] RDoc

Hi, I have a question. When I compiled ruby-1.8.2

13 messages 2005/06/09
[#145003] Re: RDoc — Eric Hodel <drbrain@...7.net> 2005/06/09

On 09 Jun 2005, at 13:55, Jesffffas Antonio Sfffe1nchez A. wrote:

[#145238] finding Hash subsets based on key value — "ee" <erik.eide@...>

Hi

17 messages 2005/06/12

[#145304] PDF::Writer 1.0 (version 1.0.1) — Austin Ziegler <halostatue@...>

= PDF::Writer

21 messages 2005/06/13
[#145411] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Jason Foreman <threeve.org@...> 2005/06/14

No love from PDF::Writer on Mac OS X 10.4.1. I hope to get this fixed

[#145420] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Austin Ziegler <halostatue@...> 2005/06/14

On 6/14/05, Jason Foreman <threeve.org@gmail.com> wrote:

[#145432] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Jamis Buck <jamis@37signals.com> 2005/06/15

On Jun 14, 2005, at 5:11 PM, Austin Ziegler wrote:

[#145339] survey: what editor do you use to hack ruby? — Lowell Kirsh <lkirsh@...>

I've been having a tough time getting emacs set up properly with ruby

62 messages 2005/06/14

[#145390] Ruby and recursion (Ackermann benchmark) — ptkwt@... (Phil Tomson)

14 messages 2005/06/14

[#145586] How to make a browser in Ruby Tk — sujeet kumar <sujeetkr@...>

Hi

13 messages 2005/06/16

[#145636] Super-scalar Optimizations — "Phrogz" <gavin@...>

I was looking over the shoulder of a C++ coworker yesterday, when he

14 messages 2005/06/16

[#145677] Truth maintenance system in Ruby — "itsme213" <itsme213@...>

Anyone know of any kind of truth-maintenance system implemented in Ruby (or,

12 messages 2005/06/17

[#145720] Frameless RDoc template ('technology preview') — ES <ruby-ml@...>

Hi!

17 messages 2005/06/17

[#145779] Newbe questions... — "Chuck Brotman" <brotman@...>

In Ruby Is there a prefered (or otherwise elegant) way to do an inner &

17 messages 2005/06/18

[#145790] GC.disable not working? — Eric Mahurin <eric_mahurin@...>

From what I can tell, GC.disable doesn't work. I'm wanting to

37 messages 2005/06/18
[#145822] Re: GC.disable not working? — ts <decoux@...> 2005/06/19

>>>>> "E" == Eric Mahurin <eric_mahurin@yahoo.com> writes:

[#146024] evaluation of ruby — "Franz Hartmann" <porschefranz@...> 2005/06/21

Hello all,

[#145830] preventing instantiation — "R. Mark Volkmann" <mark@...>

What is the recommended way in Ruby to prevent other classes from creating

13 messages 2005/06/19
[#145831] Re: preventing instantiation — Gavri Fernandez <gavri.fernandez@...> 2005/06/19

On 6/19/05, R. Mark Volkmann <mark@ociweb.com> wrote:

[#145879] x==1 vs 1==x — Gavin Kistner <gavin@...>

I'm against _premature_ optimization in theory, but believe that a

19 messages 2005/06/20
[#145880] Re: x==1 vs 1==x — ts <decoux@...> 2005/06/20

>>>>> "G" == Gavin Kistner <gavin@refinery.com> writes:

[#145943] Chess Variants (II) (#36) — James Edward Gray II <james@...>

I don't want to spoil all the fun, in case anyone is still attempting

12 messages 2005/06/20

[#146038] 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Michael Tan <mtan1232000@...>

Just new to Ruby since last week, running my same functional program on the windows XP(Pentium M1.5G), the Ruby version is 10 times slower than the Java version. The program is to find the prime numbers like 2, 3,5, 7, 11, 13... Are there setup issues? or it is normal?

47 messages 2005/06/21
[#146044] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Florian Frank" <flori@...> 2005/06/21

Michael Tan wrote:

[#146047] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Jim Freeze <jim@...> 2005/06/21

* Florian Frank <flori@nixe.ping.de> [2005-06-22 05:40:14 +0900]:

[#146050] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Ryan Leavengood" <mrcode@...> 2005/06/21

Jim Freeze said:

[#146132] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Mark Thomas" <mrt@...> 2005/06/22

Florian Frank wrote:

[#146064] rubyscript2exe — Joe Van Dyk <joevandyk@...>

Hi,

14 messages 2005/06/21

[#146169] spidering a website to build a sitemap — Bill Guindon <agorilla@...>

I need to spider a site and build a sitemap for it. I've looked

17 messages 2005/06/22

[#146178] traits-0.4.0 - the coffee release — "Ara.T.Howard" <Ara.T.Howard@...>

15 messages 2005/06/22

[#146328] string to Class object — "R. Mark Volkmann" <mark@...>

How can I create a Class object from a String that contains the name of a class?

15 messages 2005/06/24

[#146380] Application-0.6.0 — Jim Freeze <jim@...>

CommandLine - Application and OptionParser

22 messages 2005/06/24

[#146391] ASP.NET vs Ruby on Rails — Stephen Kellett <snail@...>

HI Folks,

21 messages 2005/06/24
[#146457] Re: ASP.NET vs Ruby on Rails — "Dema" <demetriusnunes@...> 2005/06/25

Hi Stephen,

[#146425] speeding up Process.detach frequency — Joe Van Dyk <joevandyk@...>

Is there any way to speed up Process.detach? The ri documentation for

14 messages 2005/06/25

[#146483] I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Michael Tan <mtan1232000@...>

22 messages 2005/06/26
[#146485] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Florian Frank" <flori@...> 2005/06/26

Michael Tan wrote:

[#146504] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Brad Wilson <dotnetguy@...> 2005/06/26

For comparison, the port of your code to (less than elegant) C#.

[#146515] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Florian Gro<florgro@...> 2005/06/26

Brad Wilson wrote:

[#146491] What do you want to see in a Sparklines Library? — Daniel Nugent <nugend@...>

This is sort of an interest gauging/feature request poll.

17 messages 2005/06/26
[#146506] Re: What do you want to see in a Sparklines Library? — Daniel Amelang <daniel.amelang@...> 2005/06/26

See what's already been done before you get too far.

[#146517] Re: What do you want to see in a Sparklines Library? — Daniel Nugent <nugend@...> 2005/06/26

Yup, seen the stuff on RedHanded, I was planning on writing a little

[#146562] RCM - A Ruby Configuration Management System — Michael Neumann <mneumann@...>

Hi all,

22 messages 2005/06/27

[#146630] yield does not take a block — Daniel Brockman <daniel@...>

Under ruby 1.9.0 (2005-06-23) [i386-linux], irb 0.9.5(05/04/13),

48 messages 2005/06/28
[#146666] Re: yield does not take a block — Daniel Brockman <daniel@...> 2005/06/28

Yukihiro Matsumoto <matz@ruby-lang.org> writes:

[#146680] Re: yield does not take a block — Yukihiro Matsumoto <matz@...> 2005/06/28

Hi,

[#146684] Re: yield does not take a block — Eric Mahurin <eric_mahurin@...> 2005/06/28

[#146779] Re: yield does not take a block — "Adam P. Jenkins" <thorin@...> 2005/06/29

Eric Mahurin wrote:

[#146700] Anything in new Eclipse for Rubyists? — "jfry" <jeff.fry@...>

Hey there, I know that a number of folks on the list use Eclipse as

14 messages 2005/06/28

[#146773] Programmers Contest: Fit pictures on a page — hicinbothem@...

GLOSSY: The Summer Programmer Of The Month Contest is underway!

18 messages 2005/06/29

[#146815] shift vs. slice!(0) and others — Eric Mahurin <eric_mahurin@...>

I just did some benchmarking of various ways to insert/delete

12 messages 2005/06/29

[ANN] StringMatrix

From: Gavin Kistner <gavin@...>
Date: 2005-06-08 14:23:31 UTC
List: ruby-talk #144879
(This isn't a library I plan on maintaining, but ANN felt like the  
right prefix for offering up code for mass enjoyment.)

At work yesterday I needed to do some algebra on some matrix math to  
reverse-derive a value. (To be specific, I needed to figure out how  
to draw the three euler rotation values out of a ZXY rotation  
matrix.) After spending 2 minutes writing out equations and fearing I  
was making a mistake, I turned to Excel and some stupid text  
manipulation to produce my formulae. After 10 minutes of messing  
around, I got the answer wrong anyhow.

I decided to write a little Ruby library to do the task for me. I  
wrote a matrix class which knows how to do matrix math on strings,  
producing formulae from them. After the initial pass produced a lot  
of values like "0*sinX" and "0 + 0 + 1*(sinX)" I made it a bit  
smarter, so that 0s and 1s properly simplify the equations during  
calculation.

It doesn't produce perfectly-reduced equations by any means, but it  
did the trick. In the end, I got my result :)

Sample output follows, followed by the code itself. Enjoy!

M1:
---------------------------------------------------------------------
0 | 1 | 2
3 | 4 | 5

M2:
---------------------------------------------------------------------
x |  y |  z
3q | 4r | 5s

M1 scaled by 2:
---------------------------------------------------------------------
0 | 2 |  4
6 | 8 | 10

M2 scaled by 2:
---------------------------------------------------------------------
x * 2 |  y * 2 |  z * 2
3q * 2 | 4r * 2 | 5s * 2

M1 + M2:
---------------------------------------------------------------------
    x   |  1 + y |  2 + z
3 + 3q | 4 + 4r | 5 + 5s

X:
------------------------------------------------------------------------ 
-----
1 |   0   |   0
0 |  cosX | sinX
0 | -sinX | cosX

Y:
------------------------------------------------------------------------ 
-----
cosY | 0 | -sinY
   0  | 1 |   0
sinY | 0 |  cosY

Z:
------------------------------------------------------------------------ 
-----
cosZ | sinZ | 0
-sinZ | cosZ | 0
   0   |   0  | 1

X - Y:
------------------------------------------------------------------------ 
-----
1 - cosY |     0    |     sinY
     0    | cosX - 1 |     sinX
   -sinY  |   -sinX  | cosX - cosY

X * Y * Z:
------------------------------------------------------------------------ 
-----
                cosY * cosZ               |               cosY *  
sinZ               |    -sinY
((sinX * sinY) * cosZ) + (cosX * -sinZ) |  ((sinX * sinY) * sinZ) +  
(cosX * cosZ) | sinX * cosY
((cosX * sinY) * cosZ) + (-sinX * -sinZ) | ((cosX * sinY) * sinZ) + (- 
sinX * cosZ) | cosX * cosY

Z * X * Y:
------------------------------------------------------------------------ 
-----
(cosZ * cosY) + ((sinZ * sinX) * sinY) | sinZ * cosX |  (cosZ * - 
sinY) + ((sinZ * sinX) * cosY)
(-sinZ * cosY) + ((cosZ * sinX) * sinY) | cosZ * cosX | (-sinZ * - 
sinY) + ((cosZ * sinX) * cosY)
               cosX * sinY               |    -sinX     
|                cosX * cosY




stringmatrix.rb
------------------------------------------------------------------------ 
-----
# A two-dimensional matrix of arbitrary size, with common matrix
# math methods. When entries in the matrix are strings, the math
# methods produce strings representing the equation.
#
# Strings and numbers mix nicely so that multiplying by 0 wipes
# out the string properly, and multiplying by 1 or adding 0
# leaves the original unchanged.
#
# For example:
#  x = StringMatrix.parse <<END
#  1 0 0
#  0 cosX sinX
#  0 -sinX cosX
#  END
#
#  y = StringMatrix.parse <<END
#  cosY | 0 | -sinY
#  0    | 1 | 0
#  sinY | 0 | cosY
#  END
#
#  puts x, ' ', y, ' ', x - y, ' ', x * y
#
#  #=> 1 |   0   |   0
#  #=> 0 |  cosX | sinX
#  #=> 0 | -sinX | cosX
#  #=>
#  #=> cosY | 0 | -sinY
#  #=>   0  | 1 |   0
#  #=> sinY | 0 |  cosY
#  #=>
#  #=> 1 - cosY |     0    |     sinY
#  #=>     0    | cosX - 1 |     sinX
#  #=>   -sinY  |   -sinX  | cosX - cosY
#  #=>
#  #=>     cosY    |   0   |    -sinY
#  #=> sinX * sinY |  cosX | sinX * cosY
#  #=> cosX * sinY | -sinX | cosX * cosY
class StringMatrix
     # Add two values intelligently
     def self.add( v1, v2 )
         if v1==0
             v2
         elsif v2==0
             v1
         elsif Numeric===v1 && Numeric===v2
             v1+v2
         else
             self.operator_join( v1, v2, '+' )
         end
     end

     # Subtract two values intelligently
     def self.subtract( v1, v2 )
         if v2==0
             v1
         elsif v1==0
             if v2 =~ /^-\((.+)\)$/ || v2 =~ /^-(.+)$/
                 $1
             elsif v2 =~ /\s/
                 "-(#{v2})"
             else
                 "-#{v2}"
             end
         elsif Numeric===v1 && Numeric===v2
             v1-v2
         else
             self.operator_join( v1, v2, '-' )
         end
     end

     # Multiply two values intelligently
     def self.multiply( v1, v2 )
         if v1==1
             v2
         elsif v2==1
             v1
         elsif v1==0 || v2==0
             0
         elsif Numeric===v1 && Numeric===v2
             v1*v2
         else
             self.operator_join( v1, v2, '*' )
         end
     end

     # Join two values semi-intelligently
     def self.operator_join( v1, v2, op_str )
         out = ( Numeric === v1 || v1 =~ /^\S+$/ ) ? "#{v1}" : "(#{v1})"
         out << " #{op_str} "
         out << ( ( Numeric === v2 || v2 =~ /^\S+$/ ) ? "#{v2}" : "(# 
{v2})" )
     end

     attr_reader :width, :height

     # Creates a new matrix of the specified _width_ and _height_,  
optionally
     # specifying a _default_value_ to fill each cell.
     def initialize( width, height, default_value='' )
         @width = width
         @height = height
         @values = Array.new( width ){ Array.new(height) 
{ default_value } }
     end

     # Reads the value from column _x_, row _y_.
     #
     # StringMatrices are 1-based, not zero-based.
     # (The first item in the matrix is 1,1 and the last is  
_width_,_height_)
     def []( x, y )
         if !y
             @values[ x-1 ].dup
         elsif !x
             a = []
             1.upto(@width){ |x|
                 a << @values[ x-1 ][ y-1 ]
             }
             a
         else
             @values[ x-1 ][ y-1 ]
         end
     end

     # Sets the value in column _x_, row _y_ to _val_.
     #
     # StringMatrices are 1-based, not zero-based.
     # (The first item in the matrix is 1,1 and the last is  
_width_,_height_)
     def []=( x, y, val )
         @values[ x-1 ][ y-1 ] = val
     end

     # Adds the supplied _right_matrix_ from the current matrix
     # and returns the result. (The original matrix is not modified.)
     def +( right_matrix )
         raise "Size mismatch" if width != right_matrix.width ||  
height != right_matrix.height
         out = self.class.new( width, height )
         1.upto( @height ){ |y|
             1.upto( @width ){ |x|
                 out[ x, y ] = self.class.add( self[ x, y ],  
right_matrix[ x, y ] )
             }
         }
         out
     end

     # Subtracts the supplied _right_matrix_ from the current matrix
     # and returns the result. (The original matrix is not modified.)
     def -( right_matrix )
         raise "Size mismatch" if width != right_matrix.width ||  
height != right_matrix.height
         out = self.class.new( width, height )
         1.upto( @height ){ |y|
             1.upto( @width ){ |x|
                 out[ x, y ] = self.class.subtract( self[ x, y ],  
right_matrix[ x, y ] )
             }
         }
         out
     end

     # Performs matrix multiplication between the two matrices.
     # (The original matrix is not modified.)
     def *( right_matrix )
         raise "Size mismatch" if width != right_matrix.height ||  
height != right_matrix.width
         out = self.class.new( width, height )
         1.upto( @height ){ |y|
             1.upto( @width ){ |x|
                 row = self[ nil, y ]
                 col = right_matrix[ x, nil ]
                 val = row.zip( col ).inject( 0 ){ |sum, pair|
                     self.class.add( sum, self.class.multiply( *pair ) )
                 }
                 out[ x, y ] = val
             }
         }
         out
     end

     # Scales the matrix, multiplying each value by _scale_value_ and  
returning
     # the resulting matrix.
     # (The original matrix is not modified.)
     def scale( scale_value )
         out = self.class.new( width, height )
         1.upto( @height ){ |y|
             1.upto( @width ){ |x|
                 out[ x, y ] = self.class.multiply( self[ x, y ],  
scale_value )
             }
         }
         out
     end

     # Parses a multi-line string for use as a StringMatrix
     #
     # Lines in the string may be delimited by tabs, vertical bars,  
or commas.
     # The most common item is used as the separator; if none of the  
above are
     # present in the string, spaces are used.
     def self.parse( raw_str )
         best_count = 1
         split_char = [ "\t", '|', ',' ].inject( ' ' ){ |split_char,  
char|
             count = raw_str.scan( char ).length
             if count > best_count
                 best_count = count
                 char
             else
                 split_char
             end
         }

         values = []
         y = 0
         raw_str.each_line{ |line|
             line.split( split_char ).each_with_index{ |val, x|
                 val.strip!
                 ( values[ x ] ||= [] )[ y ] = case val
                     when /^\d+$/ then val.to_i
                     when /^\d+\.\d+$/ then val.to_f
                     else val
                 end
             }
             y += 1
         }

         width = values.length
         height = y
         out = self.new( width, height, '' )
         1.upto( height ){ |y|
             1.upto( width ){ |x|
                 out[ x, y ] = values[ x-1 ][ y-1 ]
             }
         }
         out
     end

     def to_s( no_padding=false )
         out = ''
         column_widths = @values.collect{ |col|
             no_padding ? 0 : col.inject(0){ |max_len,val|
                 len = val.to_s.length
                 max_len > len ? max_len : len
             }
         }
         1.upto(@height){ |y|
             1.upto(@width){ |x|
                 out << self[ x, y ].to_s.centered_in( column_widths 
[ x-1 ] )
                 out << " | " unless x == @width
             }
             out << "\n" unless y == @height
         }
         out
     end

end

class String
     # Returns a copy of the string, centered (by padding both sides  
with spaces)
     # within the specified width.
     #
     # If width is smaller than the length of the string, the string  
itself is returned.
     def centered_in( width )
         out = self.dup
         remains = width - out.length
         if remains > 0
             back = remains / 2
             front = remains - back
             out = " "*front + out + " "*back
         end
         out
     end
end

if $0 == __FILE__
     m1 = StringMatrix.parse( "0,1,2\n3,4,5" )
     m2 = StringMatrix.parse( "x,y,z\n3q,4r,5s" )
     puts <<-ENDOUTPUT
M1:
---------------------------------------------------------------------
#{ m1 }

M2:
---------------------------------------------------------------------
#{ m2 }

M1 scaled by 2:
---------------------------------------------------------------------
#{ m1.scale( 2 ) }

M2 scaled by 2:
---------------------------------------------------------------------
#{ m2.scale( 2 ) }

M1 + M2:
---------------------------------------------------------------------
#{ m1 + m2 }

     ENDOUTPUT

x = StringMatrix.parse <<-ENDMATRIX
1 0 0
0 cosX sinX
0 -sinX cosX
     ENDMATRIX

y = StringMatrix.parse <<-ENDMATRIX
cosY | 0 | -sinY
0    | 1 | 0
sinY | 0 | cosY
     ENDMATRIX


     z = StringMatrix.parse <<-ENDMATRIX
cosZ    sinZ    0
-sinZ    cosZ    0
0    0    1
     ENDMATRIX

     puts <<-ENDOUT
X:
------------------------------------------------------------------------ 
-----
#{x}

Y:
------------------------------------------------------------------------ 
-----
#{y}

Z:
------------------------------------------------------------------------ 
-----
#{z}

X - Y:
------------------------------------------------------------------------ 
-----
#{x-y}

X * Y * Z:
------------------------------------------------------------------------ 
-----
#{x*y*z}
     ENDOUT

end

In This Thread

Prev Next