矩阵

类矩阵()

class cairo.Matrix(xx: float = 1.0, yx: float = 0.0, xy: float = 0.0, yy: float = 1.0, x0: float = 0.0, y0: float = 0.0)

矩阵 在整个开罗用于在不同的坐标空间之间转换。一 矩阵 保持仿射变换,如比例、旋转、剪切或这些的组合。点(x,y)的变换由以下公式给出:

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

电流变换矩阵 Context ,表示为 矩阵 定义从用户空间坐标到设备空间坐标的转换。

一些标准的python操作符可以与矩阵一起使用:

矩阵 ::

xx, yx, xy, yy, x0, y0 = matrix

将两个矩阵相乘:

matrix3 = matrix1.multiply(matrix2)
# or equivalently
matrix3 = matrix1 * matrix2

比较两个矩阵:

matrix1 == matrix2
matrix1 != matrix2

有关矩阵转换的更多信息,请参阅https://www.cairographics.org/cookbook/matrix_transform/

__init__(xx: float = 1.0, yx: float = 0.0, xy: float = 0.0, yy: float = 1.0, x0: float = 0.0, y0: float = 0.0) None
参数:
  • xx -- 仿射变换的xx分量

  • yx -- 仿射变换的yx分量

  • xy -- 仿射变换的xy分量

  • yy -- 仿射变换的YY分量

  • x0 -- 仿射变换的X平移分量

  • y0 -- 仿射变换的Y平移分量

创建新的 矩阵 用仿射变换给出 XX、YX、XY、YY、X0、Y0 . 转换方式为:

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

创建新的标识矩阵:

matrix = cairo.Matrix()

要创建一个转换矩阵,分别由x和y维中的tx和ty转换:

matrix = cairo.Matrix(x0=tx, y0=ty)

要创建一个变换矩阵,分别在x和y维度中按sx和sy缩放:

matrix = cairo.Matrix(xx=sy, yy=sy)
classmethod init_rotate(radians: float) Matrix
参数:

radians -- 旋转角度,以弧度表示。旋转方向的定义是,正角度从正X轴向正Y轴方向旋转。使用cairo的默认轴方向,正角度以顺时针方向旋转。

返回:

一个新的 矩阵 设置为旋转 弧度 .

invert() Matrix | None
返回:

如果 矩阵 有反义词,修改 矩阵 做逆矩阵并返回 None

加薪:

cairo.Error 如果 矩阵 作为非反转

变化 矩阵 与原始值成反比。并非所有变换矩阵都有逆矩阵;如果矩阵将点折叠在一起(它是 退化 ,则没有逆函数,该函数将失败。

multiply(matrix2: Matrix) Matrix
参数:

matrix2 -- 第二矩阵

返回:

一个新的 矩阵

将中的仿射变换相乘 矩阵矩阵2 一起。结果转换的效果是首先将转换应用于 矩阵 然后将转换应用于 矩阵2 到坐标。

允许结果与 矩阵矩阵2 .

rotate(radians: float) None
参数:

radians -- 旋转角度,以弧度表示。旋转方向的定义是,正角度从正X轴向正Y轴方向旋转。使用cairo的默认轴方向,正角度以顺时针方向旋转。

初始化 矩阵 到一个旋转 弧度 .

scale(sx: float, sy: float) None
参数:
  • sx -- X方向的比例因子

  • sy -- Y方向的比例因子

应用缩放比例 SX,SY 到年的转变 矩阵 . 新变换的效果是首先按比例缩放坐标 sxsy ,然后将原始转换应用于坐标。

transform_distance(dx: float, dy: float) Tuple[float, float]
参数:
  • dx -- 距离向量的x分量。

  • dy -- 距离向量的y分量。

返回:

变换后的距离向量(dx,dy),都是浮点

变换距离向量 (Dx,Dy) 通过 矩阵 . 这和 transform_point() 只是转换的转换组件被忽略了。返回向量的计算如下:

dx2 = dx1 * a + dy1 * c
dy2 = dx1 * b + dy1 * d

仿射变换是位置不变的,所以相同的向量总是变换成相同的向量。如果 (x1,y1) 变换到 (x2、y2) 然后 (x1+dx1,y1+dy1) 将转换为 (x1+dx2,y1+dy2) 对于以下所有值 x1x2 .

transform_point(x: float, y: float) Tuple[float, float]
参数:
  • x -- X位置。

  • y -- Y位置。

返回:

转换点(x,y),两个浮点

转换点 (x,y) 通过 矩阵 .

translate(tx: float, ty: float) None
参数:
  • tx -- X方向的平移量

  • ty -- Y方向的平移量

应用转换方式 TX,TY 到年的转变 矩阵 . 新转换的效果是首先通过 txty ,然后将原始转换应用于坐标。

xx: float = Ellipsis

仿射变换的xx分量

在 1.12.0 版本加入.

yx: float = Ellipsis

仿射变换的yx分量

在 1.12.0 版本加入.

xy: float = Ellipsis

仿射变换的xy分量

在 1.12.0 版本加入.

yy: float = Ellipsis

仿射变换的YY分量

在 1.12.0 版本加入.

x0: float = Ellipsis

仿射变换的X平移分量

在 1.12.0 版本加入.

y0: float = Ellipsis

仿射变换的Y平移分量

在 1.12.0 版本加入.