rubyのMatrixとCairo::Matrix

Cairo::MatrixをrubyのMatrixとVectorに置き換えてみた。
rubyのMatrixほうが、行列っぽく書ける。
これで、Cairo::Matrixのニュアンスが判った。

#!usr/bin/env ruby

require 'cairo'
require 'matrix'

matrix = Cairo::Matrix.rotate(0.5) * Cairo::Matrix.scale(2, 3)
x, y = 35, 65

xx, yx, xy, yy, x0, y0 = matrix.to_a
c_matrix = Cairo::Matrix.new(xx, yx, xy, yy, x0, y0)
r_matrix = Matrix[
[xx, xy, x0],
[yx, yy, y0],
[ 0, 0, 1]]

cx, cy = c_matrix.transform_point(x, y)
rx, ry = (r_matrix * Vector[x, y, 1]).to_a
puts "+++---------------------------------------------+++"
puts "cx : #{cx} | cy : #{cy}"
puts "rx : #{rx} | ry : #{ry}"

a1, a2, a3, a4, a5, a6 = matrix.to_a
c_matrix = Cairo::Matrix.new(a1, a2, a3, a4, a5, a6)
r_matrix = Matrix[
[a1, a3, a5],
[a2, a4, a6],
[ 0, 0, 1]]

cx, cy = c_matrix.transform_point(x, y)
rx, ry = (r_matrix * Vector[x, y, 1]).to_a
puts "+++---------------------------------------------+++"
puts "cx : #{cx} | cy : #{cy}"
puts "rx : #{rx} | ry : #{ry}"
[PR]
by gaziya | 2011-05-10 18:00