C

变换类

class Qul::PlatformInterface::Transform

Transform 类指定坐标系统的 2D 变换。 更多...

头文件 #include <platforminterface/transform.h>
Qt Quick Ultralite (平台) 1.5
继承 Qul::PlatformInterface::GenericMatrix (私有)

公共类型

枚举Type { Identity, Translate, UniformScale, Scale, Rotation, …, Project }

公共函数

Transform(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)
Transform(Qul::PlatformInterface::Transform::Type type, float m11, float m12, float m21, float m22, float dx, float dy)
变换()
floatm11() const
floatm12() const
floatm13() const
floatm21() const
floatm22() const
floatm23() const
floatm31() const
floatm32() const
floatm33() const
floatdeterminant() const
floatdx() const
floatdy() const
Qul::PlatformInterface::Transforminverted(bool *invertible) const
PlatformInterface::PointFmap(PlatformInterface::PointF point) const
PlatformInterface::RectFmap(const PlatformInterface::RectF &rect) const
Qul::PlatformInterface::Transform::Typeoptimize()
Qul::PlatformInterface::Transform &rotate(float angle)
Qul::PlatformInterface::Transform &scale(float sx, float sy)
Qul::PlatformInterface::Transform &translate(float x, float y)
Qul::PlatformInterface::Transformtranslated(float x, float y) const
PlatformInterface::PointFtranslation() const
Qul::PlatformInterface::Transform::Type类型() const
Qul::PlatformInterface::Transform算符operator*(const Qul::PlatformInterface::Transform &位移) const
bool算符operator==(const Qul::PlatformInterface::Transform &位移) const

静态公众成员

Qul::PlatformInterface::TransformfromRotation(float 角度)
Qul::PlatformInterface::TransformfromScale(float 水平缩放, float 垂直缩放)
Qul::PlatformInterface::TransformfromTranslation(float dx, float dy)

详细描述

变换指定了如何平移、缩放、倾斜、旋转或投影坐标系。通常用于渲染图形。

Transform 类型及其矩阵可以在创建 Transform 对象时设置。默认构造函数创建具有 Identity 类型和大小的 Transform 对象。或者,可以使用 fromTranslation(),fromRotation() 或 fromScale() 静态函数创建 Transform 对象。此外,还可以通过应用 基本矩阵运算 来创建 Transform 对象。

Transform 类支持使用 map() 函数映射图形原语。例如,可以将给定的点或矩形映射到变换定义的坐标系中。

Transform 提供了 type() 函数以获取当前变换类型的信息,以及 optimize() 函数以强制重新检查类型,函数 inverted() 返回变换的逆值副本(如果可以被逆变换),否则返回恒等变换。此外,Transform 还提供了 determinant() 函数,该函数返回矩阵的行列式。

最后,Transform 类支持乘法和比较运算。

基本矩阵运算

m11m12m13
m21m22m23
m31(dx)m32(dy)m33

Transform 对象包含一个 3x3 矩阵。其中,

  • m31 (dx)m32 (dy) 指定了水平和垂直平移。
  • m11m22 指定了水平和垂直缩放。
  • m12m21 指定了水平和垂直 剪切
  • m13m23 指定了水平和垂直投影,其中 m33 用作额外的投影因子。

Transform 使用以下公式对平面上的点执行变换

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
if (is not affine) {
    w' = m13*x + m23*y + m33
    x' /= w'
    y' /= w'
}

其中,(x, y) 是原始点,而 (x', y') 是变换点。可以通过在 inverted() 矩阵上执行相同的操作将 (x', y') 变换回 (x, y)

在构建变换时可以设置各种矩阵元素。也可以使用translate()rotate()scale()便捷函数来操作它们。当前值可以使用m11()m12()m13()m21()m22()m23()m31()m32()m33()dx()dy()函数检索。

以下变换被支持:

  • 可以通过设置dxdy来实现平移,将坐标系沿X轴移动dx单位,沿Y轴移动dy单位。
  • 可以通过设置m11m22来实现缩放。例如,将m11设置为2,将m22设置为1.5,可以使高度加倍,宽度增加50%。
  • 通过将m11m22m33设置为1(其他都设置为0)实现单位变换,将一个点映射到自身。
  • 剪切由m12m21控制。将这些元素设置为非零值将扭曲坐标系。
  • 通过设置剪切和缩放因子可以实现旋转。
  • 可以通过设置投影和缩放因子来实现透视变换。

注意事项:

  • 内部变换表示使用转置矩阵,这将改变变换组合的顺序。
  • 将变换(A)应用于向量(V)(x, y, 1)的计算方式为(m11 * x + m21 * y + m31, m12 * x + m22 * y + m32)。这是通过调用A.map(V)实现的。等效的操作是:(V * A)或(A^T * V)。这也可以解释为从右边应用变换。
  • 因此,连续应用两个变换A * B,意味着首先应用A,然后应用B。
  • 剪切或投影可以表示为变换,但绘图引擎尚不支持仿射变换的混合。

注意:该功能可能不受所有参考板上的硬件支持。更多信息,请参阅支持的功能表。另请参阅变换QML类型

成员类型文档

enum Transform::Type

常数描述
Qul::PlatformInterface::Transform::Identity0单位变换
Qul::PlatformInterface::Transform::Translate1纯平移
Qul::PlatformInterface::Transform::UniformScale2先均等地缩放然后平移
Qul::PlatformInterface::Transform::Scale3先缩放然后平移
Qul::PlatformInterface::Transform::Rotation4旋转,均等地缩放(可能),然后平移
Qul::PlatformInterface::Transform::ScaleRotation5缩放,旋转,然后平移
Qul::PlatformInterface::Transform::Shear6旋转,非均匀缩放,然后平移
Qul::PlatformInterface::Transform::Project7任意投影变换

成员函数文档

Transform::Transform(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)

使用Project类型以及因子:m11m12m13m21m22m23m31m32m33构建一个Transform对象。

参见optimize()和基本矩阵运算

Transform::Transform(Qul::PlatformInterface::Transform::Type type, float m11, float m12, float m21, float m22, float dx, float dy)

使用给定的type和因子:m11m12m21m22dxdy构建一个Transform对象。

参见基本矩阵运算

Transform::Transform()

默认构造函数创建一个具有Identity类型的Transform对象。

除了设置缩放因子(指定为m11m22)和设置到1的m33外,所有元素都设置为0。

参见基本矩阵运算

float Transform::m11() const

返回水平缩放因子。

参见scale()和基本矩阵运算

float Transform::m12() const

返回垂直剪切因子。

注意:可以通过Transform表示剪切,但绘图引擎不支持剪切的混合。

参见基本矩阵运算

float Transform::m13() const

返回水平投影因子。

注意:可以通过Transform表示投影,但绘图引擎至今不支持投影的混合。

参见基本矩阵运算

float Transform::m21() const

返回水平剪切因子。

参见基本矩阵运算

float Transform::m22() const

返回垂直缩放因子。

参见scale()和基本矩阵运算

float Transform::m23() const

返回垂直投影因子。

注意:可以通过Transform表示投影,但绘图引擎不支持投影的混合。

参见基本矩阵运算

float Transform::m31() const

返回水平平移因子。

参见dxtranslate基本矩阵运算

float Transform::m32() const

返回垂直平移因子。

参见dytranslate基本矩阵运算

float Transform::m33() const

返回除法因子。

参见基本矩阵运算

float Transform::determinant() const

返回此变换矩阵的行列式。

float Transform::dx() const

返回水平平移因子。

参阅 m31(),translate() 和 基本矩阵运算

float Transform::dy() const

返回垂直平移因子。

参阅 m32(),translate() 和 基本矩阵运算

[static] Qul::PlatformInterface::Transform Transform::fromRotation(float angle)

返回一个旋转特定角度的 Transform 对象。

参阅 rotate() 和 基本矩阵运算

[static] Qul::PlatformInterface::Transform Transform::fromScale(float sx, float sy)

返回一个具有特定 sxsy 缩放因子的 Transform 对象。

参见scale()和基本矩阵运算

[static] Qul::PlatformInterface::Transform Transform::fromTranslation(float dx, float dy)

返回一个具有特定 dxdy 平移因子的 Transform 对象。

参阅 translated(),translate() 和 基本矩阵运算

PlatformInterface::PointF Transform::map(PlatformInterface::PointF point) const

返回映射到由该转换定义的坐标系的给定 point

如果该转换的矩阵不可逆,则返回一个单位转换。如果给定的 invertible 是一个有效的指针,其值设置为 true,如果矩阵是可逆的,否则设置为 false

参阅 Transform

PlatformInterface::PointF Transform::map(PlatformInterface::PointF point) const

返回给定 point 的副本,并映射到由该转换定义的坐标系。

参见基本矩阵运算

PlatformInterface::RectF Transform::map(const PlatformInterface::RectF &rect) const

返回给定 rect 的副本,并映射到由该转换定义的坐标系。

参见基本矩阵运算

Qul::PlatformInterface::Transform::Type Transform::optimize()

优化此转换当前元素的使用。

一些操作,如 translate(),scale() 和 rotate(),可以在单位矩阵或之前已平移或缩放的情况下更有效地执行。

通常,变换类在执行操作时内部跟踪这种特殊类型。然而,如果直接设置矩阵或者在一系列平移、缩放和旋转操作后导致简化的矩阵,就可能失去对特殊类型的跟踪。例如,先向左旋转,然后再用相同的角度向右旋转。在这种情况下,变换会恢复到最安全的但效率最低的操作。

如果变换的因素符合已知的优化类型之一,可以通过调用 optimize() 强制它恢复特殊类型。

另请参阅类型

Qul::PlatformInterface::Transform &Transform::rotate(float angle)

返回一个引用,该引用表示按照给定的 angle 旋转的变换对象。

angle 以度为单位指定。

参见基本矩阵运算

Qul::PlatformInterface::Transform &Transform::scale(float sx, float sy)

返回一个引用,表示按照给定的 sxsy 因子缩放的变换对象。

参见基本矩阵运算

Qul::PlatformInterface::Transform &Transform::translate(float x, float y)

返回一个引用,表示按照给定的 xy 因子平移的变换对象。

另请参阅平移() 和 基本矩阵运算

Qul::PlatformInterface::Transform Transform::translated(float x, float y) const

返回一个变换的副本,该副本按照给定的 xy 因子平移。

另请参阅平移() 和 基本矩阵运算

PlatformInterface::PointF Transform::translation() const

返回一个包含此变换平移因子的 Qul::PlatformInterface::PointF

另请参阅m31(),m32(),dx(),dy() 和 基本矩阵运算

Qul::PlatformInterface::Transform::Type Transform::type() const

返回此变换的变换类型。

变换类型捕获了所有变换。例如,如果变换是缩放和旋转,则类型将是 ScaleRotation

了解变换类型对优化非常有用:您通常可以优化特定变换的处理方式。

另请参阅optimize

Qul::PlatformInterface::Transform Transform::operator*(const Qul::PlatformInterface::Transform &transform) const

返回将此变换与给定 transform 相乘的结果。

注意:矩阵乘法不是交换的。即 a*b != b*a

bool Transform::operator==(const Qul::PlatformInterface::Transform &transform) const

如果此变换等于给定的transform,则返回 true,否则返回 false

受特定Qt许可证的约束。
了解更多信息。