C
变换类
class Qul::PlatformInterface::TransformTransform 类指定坐标系统的 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) | |
变换() | |
float | m11() const |
float | m12() const |
float | m13() const |
float | m21() const |
float | m22() const |
float | m23() const |
float | m31() const |
float | m32() const |
float | m33() const |
float | determinant() const |
float | dx() const |
float | dy() const |
Qul::PlatformInterface::Transform | inverted(bool *invertible) const |
PlatformInterface::PointF | map(PlatformInterface::PointF point) const |
PlatformInterface::RectF | map(const PlatformInterface::RectF &rect) const |
Qul::PlatformInterface::Transform::Type | optimize() |
Qul::PlatformInterface::Transform & | rotate(float angle) |
Qul::PlatformInterface::Transform & | scale(float sx, float sy) |
Qul::PlatformInterface::Transform & | translate(float x, float y) |
Qul::PlatformInterface::Transform | translated(float x, float y) const |
PlatformInterface::PointF | translation() const |
Qul::PlatformInterface::Transform::Type | 类型() const |
Qul::PlatformInterface::Transform | 算符operator*(const Qul::PlatformInterface::Transform &位移) const |
bool | 算符operator==(const Qul::PlatformInterface::Transform &位移) const |
静态公众成员
Qul::PlatformInterface::Transform | fromRotation(float 角度) |
Qul::PlatformInterface::Transform | fromScale(float 水平缩放, float 垂直缩放) |
Qul::PlatformInterface::Transform | fromTranslation(float dx, float dy) |
详细描述
变换指定了如何平移、缩放、倾斜、旋转或投影坐标系。通常用于渲染图形。
Transform 类型及其矩阵可以在创建 Transform 对象时设置。默认构造函数创建具有 Identity 类型和大小的 Transform 对象。或者,可以使用 fromTranslation(),fromRotation() 或 fromScale() 静态函数创建 Transform 对象。此外,还可以通过应用 基本矩阵运算 来创建 Transform 对象。
Transform 类支持使用 map() 函数映射图形原语。例如,可以将给定的点或矩形映射到变换定义的坐标系中。
Transform 提供了 type() 函数以获取当前变换类型的信息,以及 optimize() 函数以强制重新检查类型,函数 inverted() 返回变换的逆值副本(如果可以被逆变换),否则返回恒等变换。此外,Transform 还提供了 determinant() 函数,该函数返回矩阵的行列式。
最后,Transform 类支持乘法和比较运算。
基本矩阵运算
m11 | m12 | m13 |
---|---|---|
m21 | m22 | m23 |
m31 (dx) | m32 (dy) | m33 |
Transform 对象包含一个 3x3 矩阵。其中,
m31 (dx)
和m32 (dy)
指定了水平和垂直平移。m11
和m22
指定了水平和垂直缩放。m12
和m21
指定了水平和垂直 剪切。m13
和m23
指定了水平和垂直投影,其中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()函数检索。
以下变换被支持:
- 可以通过设置
dx
和dy
来实现平移,将坐标系沿X轴移动dx
单位,沿Y轴移动dy
单位。 - 可以通过设置
m11
和m22
来实现缩放。例如,将m11
设置为2,将m22
设置为1.5,可以使高度加倍,宽度增加50%。 - 通过将
m11
、m22
和m33
设置为1(其他都设置为0)实现单位变换,将一个点映射到自身。 - 剪切由
m12
和m21
控制。将这些元素设置为非零值将扭曲坐标系。 - 通过设置剪切和缩放因子可以实现旋转。
- 可以通过设置投影和缩放因子来实现透视变换。
注意事项:
- 内部变换表示使用转置矩阵,这将改变变换组合的顺序。
- 将变换(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。 - 剪切或投影可以表示为变换,但绘图引擎尚不支持仿射变换的混合。
成员类型文档
enum Transform::Type
常数 | 值 | 描述 |
---|---|---|
Qul::PlatformInterface::Transform::Identity | 0 | 单位变换 |
Qul::PlatformInterface::Transform::Translate | 1 | 纯平移 |
Qul::PlatformInterface::Transform::UniformScale | 2 | 先均等地缩放然后平移 |
Qul::PlatformInterface::Transform::Scale | 3 | 先缩放然后平移 |
Qul::PlatformInterface::Transform::Rotation | 4 | 旋转,均等地缩放(可能),然后平移 |
Qul::PlatformInterface::Transform::ScaleRotation | 5 | 缩放,旋转,然后平移 |
Qul::PlatformInterface::Transform::Shear | 6 | 旋转,非均匀缩放,然后平移 |
Qul::PlatformInterface::Transform::Project | 7 | 任意投影变换 |
成员函数文档
Transform::Transform(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)
使用Project类型以及因子:m11、m12、m13、m21、m22、m23、m31、m32、m33构建一个Transform对象。
Transform::Transform(Qul::PlatformInterface::Transform::Type type, float m11, float m12, float m21, float m22, float dx, float dy)
使用给定的type和因子:m11、m12、m21、m22、dx和dy构建一个Transform对象。
参见基本矩阵运算。
Transform::Transform()
默认构造函数创建一个具有Identity类型的Transform对象。
除了设置缩放因子(指定为m11
和m22
)和设置到1的m33
外,所有元素都设置为0。
参见基本矩阵运算。
float Transform::m11() const
返回水平缩放因子。
float Transform::m12() const
返回垂直剪切因子。
注意:可以通过Transform表示剪切,但绘图引擎不支持剪切的混合。
参见基本矩阵运算。
float Transform::m13() const
返回水平投影因子。
注意:可以通过Transform表示投影,但绘图引擎至今不支持投影的混合。
参见基本矩阵运算。
float Transform::m21() const
返回水平剪切因子。
参见基本矩阵运算。
float Transform::m22() const
返回垂直缩放因子。
float Transform::m23() const
返回垂直投影因子。
注意:可以通过Transform表示投影,但绘图引擎不支持投影的混合。
参见基本矩阵运算。
float Transform::m31() const
返回水平平移因子。
float Transform::m32() const
返回垂直平移因子。
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 对象。
[static]
Qul::PlatformInterface::Transform Transform::fromScale(float sx, float sy)
返回一个具有特定 sx 和 sy 缩放因子的 Transform 对象。
[static]
Qul::PlatformInterface::Transform Transform::fromTranslation(float dx, float dy)
返回一个具有特定 dx 和 dy 平移因子的 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)
返回一个引用,表示按照给定的 sx 和 sy 因子缩放的变换对象。
参见基本矩阵运算。
Qul::PlatformInterface::Transform &Transform::translate(float x, float y)
返回一个引用,表示按照给定的 x 和 y 因子平移的变换对象。
Qul::PlatformInterface::Transform Transform::translated(float x, float y) const
返回一个变换的副本,该副本按照给定的 x 和 y 因子平移。
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许可证的约束。
了解更多信息。