Cairo::Matrixクラス

拡大・回転・剪断とそれらを組み合わせた変換であるアフィン変換 を持つオブジェクトです。点(x, y)は以下のように変換されます。

x_new = xx * x + xy * y + x0
y_new = yx * x + yy * y + y0

オブジェクト階層

クラスメソッド

Cairo::Matrix.identity
恒等変換をする行列を生成します。
Cairo::Matrix.new(xx, yx, xy, yy, x0, y0)
対応する成分を設定した行列を生成します。
Cairo::Matrix.rotate(radians)
radians回転する変換を行う行列を返します。
Cairo::Matrix.scale(sx, sy)
X方向にsx、Y方向にsy拡大する行列を返します。
Cairo::Matrix.translate(tx, ty)
X方向にtx、Y方向にty平行移動を行う行列を返 します。

インタンスメソッド

xx
アフィン変換のxx成分を返します。
xx=(xx)
set_xx(xx)
アフィン変換のxx成分を設定します。
yx
アフィン変換のyx成分を返します。
yx=(yx)
set_yx(yx)
アフィン変換のyx成分を設定します。
xy
アフィン変換のxy成分を返します。
xy=(xy)
set_xy(xy)
アフィン変換のxy成分を設定します。
yy
アフィン変換のyy成分を返します。
yy=(yy)
set_yy(yy)
アフィン変換のyy成分を設定します。
x0
アフィン変換のX平行移動成分を返します。
x0=(x0)
set_x0(x0)
アフィン変換のX平行移動成分を設定します。
y0
アフィン変換のY平行移動成分を返します。
y0=(y0)
set_y0(y0)
アフィン変換のY平行移動成分を設定します。
clone
複製を返します。selfが凍結されているオブジェクト なら複製されたオブジェクトも凍結されています。
dup
複製を返します。
identity!
単位行列にします。
invert
逆行列を返します。全ての変換行列が逆行列を持っているわ けではありません。行列が点をつぶすなら(退化という (FIXME))逆行列がなく、Cairo::InvalidMatrixError例外 が発生します。
invert!
Cairo::Matrix#invertの破壊的なバージョンです。
*(other)
multiply(other)
Cairo::Matrix#multiplyの別名です。 selfotherの積を返します。結果として最初 にselfの変換を行い、次にotherの変換を行う新 しい変換を返します。
multiply!(other)
Cairo::Matrix#multiplyの破壊的なバージョンです。
rotate(radians)
radians回転する変換を適用した新しい行列を返します。 この結果、最初にradians回転し、次にselfを適 用する変換になります。
rotate!(radians)
Cairo::Matrix#rotateの破壊的なバージョンです。
scale(sx, sy)
X方向にsx、Y方向にsy拡大する変換を適用した 新しい行列を返します。この結果、最初にsx, syだけ拡大し、次にselfを適用する変換になり ます。
scale!(sx, sy)
Cairo::Matrix#scaleの破壊的なバージョンです。
set(xx, yx, xy, yy, x0, y0)
対応する成分を設定します。
to_a
各成分を配列として返します。
to_s
文字列に変換します。
transform_distance(dx, dy)

距離ベクトル(dx, dy)をselfで変換しま す。Cairo::Matrix#transform_pointと似ていますが、平行移 動成分を無視するところが違います。返るベクトルは以下の ように計算されます。

dx2 = dx * a + dy * c;
dy2 = dx * b + dy * d;

アフィン変換は位置不変です。同じベクトルはいつも同じベ クトルに変換されます。もし、(x1, y1)が(x2, y2)に変換さ れるなら、どんなx1, x2に対しても(x1 + dx, y1 + dy)は(x1 + dx2, y1 + dy2)に変換されま す。

transform_point(x, y)
点(x, y)をselfで変換します。
translate(tx, ty)
X方向にtx、Y方向にty平行移動を行う行列を返 します。この結果、最初にtx, ty平行移動し、次 にselfを適用する変換になります。
translate!(tx, ty)
Cairo::Matrix#translateの破壊的なバージョンです。
==(other)

Since 1.7: otherCairo::Matrixオブ ジェクトで、xx, yx, xy, yy, x0, y0それぞれが==だっ た場合にtrueを返します。

true、そうでなければfalse

参考

変更履歴