拡大・回転・剪断とそれらを組み合わせた変換であるアフィン変換 を持つオブジェクトです。点(x, y)は以下のように変換されます。
x_new = xx * x + xy * y + x0 y_new = yx * x + yy * y + y0
Cairo::Matrix.identityCairo::Matrix.new(xx, yx, xy, yy, x0, y0)Cairo::Matrix.rotate(radians)Cairo::Matrix.scale(sx, sy)Cairo::Matrix.translate(tx, ty)xxxx=(xx)set_xx(xx)yxyx=(yx)set_yx(yx)xyxy=(xy)set_xy(xy)yyyy=(yy)set_yy(yy)x0x0=(x0)set_x0(x0)y0y0=(y0)set_y0(y0)clonedupidentity!invertinvert!*(other)multiply(other)multiply!(other)rotate(radians)rotate!(radians)scale(sx, sy)scale!(sx, sy)set(xx, yx, xy, yy, x0, y0)to_a[xx, yx, xy, yy, x0, y0]
to_stransform_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)に変換されま す。
[dx2, dy2]
transform_point(x, y)[x2, y2]
translate(tx, ty)translate!(tx, ty)==(other)Since 1.7: otherがCairo::Matrixオブ
ジェクトで、xx, yx, xy, yy, x0, y0それぞれが==だっ
た場合にtrueを返します。
selfとotherが等しければtrue、そうでなければfalse。