- 类 QTransform#
QTransform
类指定了坐标系的 2D 变换。更多信息…概要#
方法#
def
__init__()
def
__reduce__()
def
__repr__()
def
adjoint()
def
determinant()
def
dx()
def
dy()
def
inverted()
def
isAffine()
def
isIdentity()
def
isInvertible()
def
isRotating()
def
isScaling()
def
isTranslating()
def
m11()
def
m12()
def
m13()
def
m21()
def
m22()
def
m23()
def
m31()
def
m32()
def
m33()
def
map()
def
mapRect()
def
mapToPolygon()
def
__ne__()
def
__mul__()
def
__imul__()
def
__add__()
def
__iadd__()
def
__sub__()
def
__isub__()
def
__div__()
def
operator //=()
def
__eq__()
def
reset()
def
rotate()
def
rotateRadians()
def
scale()
def
setMatrix()
def
shear()
定义
translate()
定义
transposed()
定义
type()
静态函数#
定义
fromScale()
定义
quadToQuad()
注意
此文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎为代码片段翻译做出贡献。如果您发现翻译中存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建票证来告诉我们
详细描述#
警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
变换指定如何平移、缩放、剪切、旋转或投射坐标系,通常用于渲染图形。
可以使用
QTransform
对象通过setMatrix()
,scale()
,rotate()
,translate()
和shear()
函数来构建。或者,它也可以通过应用基础矩阵操作来构建。矩阵也可以在构建时定义,并且可以使用reset()
函数将其重置为单位矩阵(默认值)。QTransform
类支持图形原语的映射:给定的点、线、多边形、区域或绘图路径都可以通过使用map()
函数映射到由 此 矩阵定义的坐标系。对于矩形,其坐标可以被mapRect()
函数转换。矩形还可以使用mapToPolygon()
函数转换为多边形(映射到由 此 矩阵定义的坐标系)。QTransform
提供了isIdentity()
函数,如果矩阵是单位矩阵则返回true
,以及isInvertible()
函数,如果矩阵是非奇异(即 AB = BA = I)则返回true
。函数inverted()
在矩阵可逆时返回该矩阵的逆矩阵的副本(否则返回单位矩阵),函数adjoint()
返回矩阵的经典伴随矩阵。此外,QTransform
提供了determinant()
函数,返回矩阵的行列式。最后,
QTransform
类支持矩阵乘法、加法和减法,并且该类的对象可以进行流处理和比较。渲染图形#
在渲染图形时,矩阵定义了转换,但实际的转换是由
QPainter
中的绘图例程完成的。默认情况下,
QPainter
在关联设备的坐标系上操作。一个QPaintDevice
的标准坐标系其原点位于右上角。x 值向右递增;y 值向下递增。有关完整说明,请参阅坐标系文档。QPainter
提供了在不需要使用QTransform
的情况下,平移、缩放、切变和旋转坐标系统的功能。例如def paintEvent(self, arg__0): painter = QPainter(self) painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) painter.drawRect(0, 0, 100, 100) painter.rotate(45) painter.setFont(QFont("Helvetica", 24)) painter.setPen(QPen(Qt.black, 1)) painter.drawText(20, 10, "QTransform")
虽然这些函数非常方便,但如果要执行多个变换操作,构建一个
QTransform
并调用setTransform()
可能会更高效。例如def paintEvent(self, arg__0): painter = QPainter(self) painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) painter.drawRect(0, 0, 100, 100) transform = QTransform() transform.translate(50, 50) transform.rotate(45) transform.scale(0.5, 1.0) painter.setTransform(transform) painter.setFont(QFont("Helvetica", 24)) painter.setPen(QPen(Qt.black, 1)) painter.drawText(20, 10, "QTransform")
基本矩阵运算#
QTransform
实例包含一个 3x3 矩阵。元素m31
(dx
) 和m32
(dy
) 指定了水平和垂直平移。元素m11
和m22
指定了水平和垂直缩放。元素m21
和m12
指定了水平和垂直的 切变。最后,元素m13
和m23
指定了水平和垂直的投影,其中m33
是额外的投影因子。QTransform
使用以下公式将平面上的一个点转换到另一个点x' = m11x + m21y + dx y' = m22y + m12x + dy if not isAffine(): w' = m13x + m23y + m33 x' /= w' y' /= w'
点 (x, y) 是原始点,而 (x’, y’) 是变换后的点。通过在
inverted()
矩阵上执行相同的操作,(x’, y’) 可以转换回 (x, y)。在构建矩阵时可以设置各种矩阵元素,或者在稍后使用
setMatrix()
函数来设置。可以使用translate()
、rotate()
、scale()
和shear()
方便函数对这些元素进行操作。可以借助m11()
、m12()
、m13()
、m21()
、m22()
、m23()
、m31()
、m32()
、m33()
、dx()
和dy()
函数来检索当前设置的值。平移是最简单的变换。设置
dx
和dy
将会沿着 X 轴将坐标系移动dx
个单位,并且沿着 Y 轴移动dy
个单位。通过设置m11
和m22
来执行缩放。例如,将m11
设置为 2 并且将m22
设置为 1.5 将使高度加倍并且宽度增加 50%。单位矩阵将m11
、m22
和m33
设置为 1(其他所有设置为 0),将一个点映射为自身。剪切由m12
和m21
控制。将这些元素设置为非零值将会扭曲坐标系。通过设置剪切因子和缩放因子来实现旋转。透视变换是通过对投影因子和缩放因子的设置来实现的。变换的组合#
以下是一个使用基本矩阵运算的组合变换示例:
def paintEvent(self, arg__0): a = qDegreesToRadians(45.0) sina = sin(a) cosa = cos(a) scale = QTransform(0.5, 0, 0, 1.0, 0, 0) rotate = QTransform(cosa, sina, -sina, cosa, 0, 0) translate = QTransform(1, 0, 0, 1, 50.0, 50.0) transform = scale * rotate * translate painter = QPainter(self) painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) painter.drawRect(0, 0, 100, 100) painter.setTransform(transform) painter.setFont(QFont("Helvetica", 24)) painter.setPen(QPen(Qt.black, 1)) painter.drawText(20, 10, "QTransform")
组合变换首先对每个操作数进行缩放,然后旋转,最后平移,顺序与因子乘积的书写顺序相同。这意味着应用变换的点隐含地乘以右侧的变换。
与矩阵表示的关系#
在
QTransform
中使用的矩阵表示法是常见教学惯例的转置,该惯例将变换和点表示为矩阵和向量。该惯例将其矩阵乘以左侧和右侧的列向量。换句话说,当多个变换应用于一个点时,最右侧的矩阵首先直接作用于向量。然后,左侧的下一个矩阵作用于第一次操作的结果,依此类推。因此,该惯例以与QTransform
中相反的顺序乘以组成复合变换的矩阵。正如您在Combining Transforms
中看到的,将矩阵转置并结合到表示点的行向量右侧,可以让变换矩阵的乘积以我们应对点应用变换的顺序出现。- class TransformationType#
常量
描述
QTransform.TxNone
QTransform.TxTranslate
QTransform.TxScale
QTransform.TxRotate
QTransform.TxShear
QTransform.TxProject
- __init__(other)#
- 参数:
other –
QTransform
- __init__()
构建一个单位矩阵。
所有元素都被设置为零,除了
m11
和m22
(指定缩放)和m33
,它们被设置为1。另请参阅
- __init__(h11, h12, h21, h22, dx, dy)
- 参数:
h11 – float
h12 – float
h21 – float
h22 – float
dx – float
dy – float
使用元素
m11
、m12
、m21
、m22
、dx
和dy
构建一个矩阵。另请参阅
- __init__(h11, h12, h13, h21, h22, h23, h31, h32, h33)
- 参数:
h11 – float
h12 – float
h13 – float
h21 – float
h22 – float
h23 – float
h31 – float
h32 – float
h33 – float
使用元素
m11
、m12
、m13
、m21
、m22
、m23
、m31
、m32
、m33
构建一个矩阵。另请参阅
- __reduce__()#
- 返回类型:
object
- __repr__()#
- 返回类型:
object
- adjoint()#
- 返回类型:
返回此矩阵的伴随。
- determinant()#
- 返回类型:
float
返回矩阵的行列式。
- dx()#
- 返回类型:
float
返回水平平移因子。
另请参阅
m31()
translate()
基本矩阵操作
- dy()#
- 返回类型:
float
返回垂直平移因子。
另请参阅
translate()
基本矩阵操作
- 静态fromScale(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
创建一个矩阵,其水平缩放与
sx
相对应,垂直缩放与sy
相对应。这与QTransform()
.scale(sx, sy) 相同,但速度略快。- 静态 fromTranslate(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
创建一个矩阵,其对应于沿 x 轴的平移量为
dx
和沿 y 轴的平移量为dy
。这与QTransform()
.translate(dx, dy) 相同,但速度略快。- inverted()#
- 返回类型:
PyTuple
返回该矩阵的逆矩阵副本。
如果矩阵是奇异的(不可逆),返回的矩阵是单位矩阵。如果
invertible
有效(即不等于 0),其值设置为真,如果矩阵是可逆的,否则设置为假。另请参阅
- isAffine()#
- 返回类型:
bool
如果矩阵表示仿射变换,则返回
true
,否则返回false
。- isIdentity()#
- 返回类型:
bool
如果矩阵是单位矩阵,则返回
true
,否则返回false
。另请参阅
- isInvertible()#
- 返回类型:
bool
如果矩阵是可逆的,则返回
true
,否则返回false
。另请参阅
- isRotating()#
- 返回类型:
bool
如果矩阵表示某种旋转变换,则返回
true
,否则返回false
。- isScaling()#
- 返回类型:
bool
如果矩阵表示缩放变换,则返回
true
,否则返回false
。另请参阅
- isTranslating()#
- 返回类型:
bool
如果矩阵表示平移变换,则返回
true
,否则返回false
。另请参阅
- m11()#
- 返回类型:
float
返回水平缩放因子。
另请参阅
scale()
基本 矩阵 操作
- m12()#
- 返回类型:
float
返回垂直剪切因子。
另请参阅
shear()
基本 矩阵 操作
- m13()#
- 返回类型:
float
返回水平投影因子。
另请参阅
translate()
基本矩阵操作
- m21()#
- 返回类型:
float
返回水平剪切因子。
另请参阅
shear()
基本 矩阵 操作
- m22()#
- 返回类型:
float
返回垂直缩放因子。
另请参阅
scale()
基本 矩阵 操作
- m23()#
- 返回类型:
float
返回垂直投影因子。
另请参阅
translate()
基本矩阵操作
- m31()#
- 返回类型:
float
返回水平平移因子。
另请参阅
dx()
translate()
基本 矩阵 操作
- m32()#
- 返回类型:
float
返回垂直平移因子。
另请参阅
dy()
translate()
基本 矩阵 操作
- m33()#
- 返回类型:
float
返回除法因子。
另请参阅
translate()
基本矩阵操作
- map(x, y)#
- 参数:
x – float
y – float
- 返回类型:
PyObject
警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
将给定的坐标
x
和y
映射到由该矩阵定义的坐标系中。结果值分别放入 *``tx`` 和 *``ty`` 中。坐标变换使用以下公式
x' = m11x + m21y + dx y' = m22y + m12x + dy if not isAffine(): w' = m13x + m23y + m33 x' /= w' y' /= w'
点 (x, y) 是原始点,而 (x’,y’)则是变换后的点。
另请参阅
基本矩阵操作
这是一个重载函数。
创建并返回一个
QRegion
对象,它是给定区域region
的一个副本,并映射到由此矩阵定义的坐标系统。如果使用旋转或剪切,调用此方法可能会相对昂贵。
这是一个重载函数。
创建并返回一个
QPolygonF
对象,它是给定多边形polygon
的一个副本,并映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个
QPolygon
对象,它是给定多边形polygon
的一个副本,并映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个QPoint对象,它是给定点
point
的副本,并将其映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个QPointF对象,它是给定点,
p
的副本,将其映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个QLineF对象,它是对给定线
l
的一个副本,并映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个QLine对象,它是对给定
line
的一个副本,并映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。- map(p)
- 参数:
p –
QPainterPath
- 返回类型:
这是一个重载函数。
创建并返回一个
QPainterPath
对象,它是给定path
的副本,并映射到由该矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个 QRect 对象,它是给定
rectangle
的副本,并映射到由该车矩阵定义的坐标系中。请注意,转换后的坐标将四舍五入到最接近的整数。警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
创建并返回一个 QRectF 对象,它是给定
rectangle
的副本,并将其映射到由该车矩阵定义的坐标系中。矩形的坐标使用以下公式进行转换
x' = m11x + m21y + dx y' = m22y + m12x + dy if not isAffine(): w' = m13x + m23y + m33 x' /= w' y' /= w'
如果指定了旋转或剪切,则此函数返回 包围盒 矩形。要检索给定
rectangle
映射的确切区域,请使用mapToPolygon()
函数。另请参阅
mapToPolygon()
Basic Matrix Operations
警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
创建并返回一个
QPolygon
的表示,该表示反映了给定的rectangle
,并映射到由该车矩阵定义的坐标系中。矩形的坐标使用以下公式进行转换
x' = m11x + m21y + dx y' = m22y + m12x + dy if not isAffine(): w' = m13x + m23y + m33 x' /= w' y' /= w'
多边形和矩形在转换时的行为略有不同(因为整数四舍五入),所以
matrix.map(QPolygon(rectangle))
不一定与matrix.mapToPolygon(rectangle)
相同。另请参阅
mapRect()
Basic Matrix Operations
- __ne__(arg__1)#
- 参数:
arg__1 –
QTransform
- 返回类型:
bool
如果此矩阵不等于给定的
matrix
,则返回true
,否则返回false
。- __mul__(o)#
- 参数:
o –
QTransform
- 返回类型:
返回将此矩阵与给定
矩阵
相乘的结果。请注意,矩阵乘法不是交换的,即 a*b != b*a。
- __mul__(n)
- 参数:
n – float
- 返回类型:
- __imul__(arg__1)#
- 参数:
arg__1 –
QTransform
- 返回类型:
这是一个重载函数。
返回将此矩阵与给定
矩阵
相乘的结果。- __imul__(div)
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将此矩阵与给定的
标量
按元素相乘的结果。- __add__(n)#
- 参数:
n – float
- 返回类型:
- __iadd__(div)#
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将给定
标量
添加到本矩阵每个元素的矩阵。- __sub__(n)#
- 参数:
n – float
- 返回类型:
- __isub__(div)#
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回从本矩阵每个元素中减去给定
标量
的矩阵。- __div__(n)#
- 参数:
n – float
- 返回类型:
- 操作符 /=(div)
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将本矩阵与给定的
标量
按元素相除的结果。- __eq__(arg__1)#
- 参数:
arg__1 –
QTransform
- 返回类型:
bool
如果此矩阵等于给定的
矩阵
,则返回true
,否则返回false
。- 静态 quadToQuad(one, two, result)
- 参数:
one –
QPolygonF
two –
QPolygonF
result –
QTransform
- 返回类型:
bool
创建一个变换矩阵
trans
,将四边形one
映射到另一个四边形two
。如果变换是可能的,则返回true
;否则返回false。这是一个方便的方法,结合了
quadToSquare()
和squareToQuad()
方法。它允许输入四边形被转换成任何其他四边形。另请参阅
squareToQuad()
quadToSquare()
- 静态 quadToSquare(quad, result)
- 参数:
quad –
QPolygonF
result –
QTransform
- 返回类型:
bool
创建一个变换矩阵
trans
,将四边形quad
映射到一个单位正方形。如果构造了变换,则返回true
;如果没有这样的变换,则返回false。另请参阅
squareToQuad()
quadToQuad()
- reset()#
将矩阵重置为单位矩阵,即除
m11
和m22
(指定缩放)及m33
(设置为1)外,所有元素都设置为0。另请参阅
QTransform()
isIdentity()
基本 矩阵 操作
这是一个重载函数。
根据指定的
axis
,在距离屏幕 1024.0 的地方将坐标系逆时针旋转给定角度a
,并返回矩阵的引用。请注意,如果您将
QTransform
应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以度为单位指定。
另请参阅
- rotate(a, axis, distanceToPlane)
- 参数:
a – float
axis –
Axis
distanceToPlane – float
- 返回类型:
根据指定的
axis
,在距离屏幕distanceToPlane
的地方将坐标系逆时针旋转给定角度a
,并返回矩阵的引用。请注意,如果您将
QTransform
应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以度为单位指定。
如果
distanceToPlane
为零,则将其忽略。这适用于实现正交投影,其中应丢弃而不是投影 z 轴坐标。另请参阅
根据指定的
axis
,在距离屏幕distanceToPlane
的地方将坐标系逆时针旋转给定角度a
,并返回矩阵的引用。请注意,如果您将
QTransform
应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以弧度为单位指定。
如果
distanceToPlane
为零,则将其忽略。这适用于实现正交投影,其中应丢弃而不是投影 z 轴坐标。另请参阅
- rotateRadians(a[, axis=Qt.ZAxis])
- 参数:
a – float
axis –
Axis
- 返回类型:
这是一个重载函数。
根据指定的
axis
,在距离屏幕 1024.0 的地方将坐标系逆时针旋转给定角度a
,并返回矩阵的引用。请注意,如果您将
QTransform
应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以弧度为单位指定。
另请参阅
- scale(sx, sy)#
- 参数:
sx – float
sy – float
- 返回类型:
以水平方向
sx
和垂直方向sy
缩放坐标系,并返回矩阵的引用。另请参阅
- setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33)#
- 参数:
m11 – float
m12 – float
m13 – float
m21 – float
m22 – float
m23 – float
m31 – float
m32 – float
m33 – float
将矩阵元素设置为指定的值,
m11
、m12
、m13
、m21
、m22
、m23
和m31
、m32
以及m33
。请注意,此函数将替换之前的值。《PySide6.QtGui.QTransform》提供了translate()
、rotate()
、scale()
和shear()
便捷函数来基于当前定义的坐标系操作各种矩阵元素。另请参阅
QTransform()
- shear(sh, sv)#
- 参数:
sh – float
sv – float
- 返回类型:
通过
sh
水平方向和sv
垂直方向对坐标系进行扭曲,并返回矩阵的引用。另请参阅
- static squareToQuad(square, result)
- 参数:
square –
QPolygonF
result –
QTransform
- 返回类型:
bool
创建一个转换矩阵,
trans
,将单位正方形映射到四边形,quad
。如果转换可构建则返回true
;如果不存在此类转换则返回false
。- translate(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
将坐标系沿 x 轴移动
dx
,沿 y 轴移动dy
,并返回矩阵的引用。另请参阅
- transposed()#
- 返回类型:
返回此矩阵的转置。
返回此矩阵的变换类型。
变换类型是捕获矩阵所有变换的最高枚举值。例如,如果矩阵既缩放又倾斜,则类型将是
TxShear
,因为TxShear
的枚举值高于TxScale
。了解矩阵的变换类型对于优化很有用:您通常可以比处理通用情况更优地处理特定类型。