このページでは

C

Qul::PlatformInterface::Transform Class

class Qul::PlatformInterface::Transform

Transform クラスは、座標系の 2D 変換を定義します。詳細...

Header: #include <platforminterface/transform.h>
Since: Qt Quick Ultralite (Platform) 1.5
Inherits: Qul::PlatformInterface::GenericMatrix (private)

パブリック型

enum Type { Identity, Translate, UniformScale, Scale, Rotation, …, Project }

パブリック関数

Transform()
Transform(Qul::PlatformInterface::Transform::Type type, float m11, float m12, float m21, float m22, float dx, float dy)
Transform(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)
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
Qul::PlatformInterface::PointF map(Qul::PlatformInterface::PointF point) const
Qul::PlatformInterface::RectF map(const Qul::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
Qul::PlatformInterface::PointF translation() const
Qul::PlatformInterface::Transform::Type type() const
Qul::PlatformInterface::Transform operator*(const Qul::PlatformInterface::Transform &transform) const
bool operator==(const Qul::PlatformInterface::Transform &transform) const

静的パブリックメンバー

Qul::PlatformInterface::Transform fromRotation(float angle)
Qul::PlatformInterface::Transform fromScale(float sx, float sy)
Qul::PlatformInterface::Transform fromTranslation(float dx, float dy)

詳細な説明

変換は、座標系の平行移動、拡大縮小、せん断、回転、または投影の方法を指定します。これは通常、グラフィックスのレンダリング時に使用されます。

Transform型とその行列は、Transformオブジェクトの生成時に設定できます。デフォルトのコンストラクタは、Identity 型と行列を持つTransformオブジェクトを作成します。あるいは、fromTranslation()、fromRotation()、またはfromScale()といった静的関数を使用してTransformオブジェクトを作成することもできます。また、basic matrix operations を適用することでTransformオブジェクトを作成することも可能です。

Transformクラスは、map()関数を使用してグラフィックプリミティブのマッピングをサポートしています。例えば、指定された点や矩形を、変換によって定義された座標系にマッピングすることができます。

Transform クラスは、現在の変換タイプの情報を取得するための `type()` 関数と、タイプの再チェックを強制するための `optimize()` 関数を提供しています。`inverted()` 関数は、変換が可逆である場合はその逆変換を返し、そうでない場合は単位変換を返します。さらに、Transform クラスは、行列の行列式を返す `determinant()` 関数も提供しています。

最後に、Transformクラスは乗算および等価比較をサポートしています。

基本的な行列演算

m11m12m13
m21m22m23
m31 (dx)m32 (dy)m33

Transform オブジェクトは 3 × 3 の行列を含みます。ここで、

  • 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')は変換後の点です。(x', y')は、inverted() 行列に対して同じ演算を行うことで、(x, y)に戻すことができます。

Transformの構築時には、さまざまな行列要素を設定できます。また、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に設定すると、高さが2倍になり、幅が50%増加します。
  • m11m22 、およびm33 をすべて1に設定し(その他はすべて0に設定)、点をそれ自身に写像することで、恒等変換を行います。
  • せん断は、m12 およびm21 によって制御されます。これらの要素を 0 以外の値に設定すると、座標系がねじれます。
  • 回転は、せん断およびスケーリング係数を設定することで行うことができます。
  • 透視変換は、投影係数とスケーリング係数を設定することで実行できます。

  • 内部の変換表現では転置行列が使用されるため、変換の合成順序が変化します。
  • ベクトル (V) (x, y, 1) に変換 (A) を適用する場合、計算式は(m11 * x + m21 * y + m31, m12 * x + m22 * y + m32) となります。これは、A.map(V) を呼び出すことで実現されます。同等の演算は (V * A) または (A^T * V) です。これは、変換を右側から適用することとしても解釈できます。
  • したがって、2つの変換を連結するA * B は、Aが先に適用され、その後にBが適用されることを意味します。
  • せん断や投影は Transform で表現できますが、非アフィン変換によるブレンドは、現時点では描画エンジンでサポートされていません。

注:この 機能、すべてのリファレンスボードのハードウェアでサポートされているとは限りません。詳細については、「サポートされている機能」の表を参照してください関連項目 Transform QML type

メンバ・タイプのドキュメント

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()

デフォルトコンストラクタは、Identity 型のTransformオブジェクトを作成します。

m11m22 (スケールを指定)、およびm33 を除くすべての要素はゼロに設定され、これら3つは1に設定されます。

Basic Matrix Operations」も参照してください

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

指定されたtype と、m11m12m21m22dxdy の各因子を用いて、Transformオブジェクトを生成します。

Basic Matrix Operationsも参照してください

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

Project 型で、以下の因子を持つTransformオブジェクトを構築します:m11m12m13m21m22m23m31m32m33

optimize() およびBasic Matrix Operationsも参照してください

float Transform::m11() const

水平方向のスケーリング係数を返します。

scale() およびBasic Matrix Operationsも参照してください

float Transform::m12() const

垂直方向のせん断係数を返します。

注:せん断は Transform によって表現できますが、せん断を伴うブレンドは描画エンジンではサポートされていません。

関連項目: Basic Matrix Operations

float Transform::m13() const

水平投影係数を返します。

注:投影は Transform によって表現できますが、投影されたブレンディングは、現時点では描画エンジンでサポートされていません。

関連項目: Basic Matrix Operations

float Transform::m21() const

水平せん断係数を返します。

Basic Matrix Operationsも参照してください

float Transform::m22() const

垂直方向のスケーリング係数を返します。

scale() およびBasic Matrix Operationsも参照してください

float Transform::m23() const

垂直投影係数を返します。

注:投影は Transformで表現できますが、描画エンジンでは投影されたブレンディングはサポートされていません。

関連項目: Basic Matrix Operations

float Transform::m31() const

水平方向の並進係数を返します。

dx()、translate()、およびBasic Matrix Operationsも参照してください

float Transform::m32() const

垂直方向の並進係数を返します。

dy()、translate()、およびBasic Matrix Operationsも参照してください

float Transform::m33() const

除数返します。

Basic Matrix Operationsも参照してください

float Transform::determinant() const

この変換の行列の行列式を返します。

float Transform::dx() const

水平方向の並進係数を返します。

m31()、translate()、およびBasic Matrix Operationsも参照してください

float Transform::dy() const

垂直方向の並進係数を返します。

m32()、translate()、およびBasic Matrix Operationsも参照してください

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

指定されたangle によって回転されたTransformオブジェクトを返します。

rotate() およびBasic Matrix Operationsも参照してください

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

指定されたsx およびsy のスケール係数を持つTransformオブジェクトを返します。

scale() およびBasic Matrix Operationsも参照してください

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

指定されたdx およびdy の変換係数を持つTransformオブジェクトを返します。

translated()、translate()、およびBasic Matrix Operationsも参照してください

Qul::PlatformInterface::Transform Transform::inverted(bool *invertible) const

この変換の逆変換を返します。

この変換の行列が可逆でない場合、恒等変換が返されます。指定されたinvertible が有効なポインタである場合、行列が可逆であればその値はtrue に設定され、そうでない場合はfalse に設定されます。

Transform()も参照してください

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

指定されたpoint のコピーを、この変換によって定義された座標系にマッピングして返します。

Basic Matrix Operations」も参照してください

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

指定されたrect のコピーを、この変換によって定義された座標系にマッピングして返します。

Basic Matrix Operations」も参照してください

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

現在の要素から、この変換の使用を最適化してください。

translate()、scale()、rotate() などの一部の操作は、単位行列に対して、あるいは事前に平行移動や拡大縮小が行われている場合に、より効率的に実行できます。

通常、Transform クラスは、演算の実行中にこの特別なタイプを内部的に追跡します。 しかし、行列が直接設定された場合や、平行移動、拡大縮小、回転の連鎖によって単純化された行列が生成される場合、この特殊な型が失われることがあります。例えば、左に回転した後、同じ角度だけ右に回転する場合などです。そのような場合、Transform はその後の操作において、最も安全ではあるものの、効率の低い操作に切り替わります。

Transform の係数が既知の最適化された型のいずれかに適合している場合は、optimize() を呼び出すことで、特別な型の復元を強制することができます。

type()も参照してください

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

指定されたangle によって回転されたthis 変換オブジェクトへの参照を返します。

angle は度単位で指定されます。

Basic Matrix Operations」も参照してください

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

指定されたsx およびsy の係数によってスケーリングされたthis 変換オブジェクトへの参照を返します。

Basic Matrix Operationsも参照してください

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

指定されたx およびy の係数によって変換された、this 変換オブジェクトへの参照を返します。

translated() およびBasic Matrix Operationsも参照してください

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

指定されたx およびy の係数によって変換された、この変換のコピーを返します。

translate() およびBasic Matrix Operationsも参照してください

Qul::PlatformInterface::PointF Transform::translation() const

この変換の変換係数を含むQul::PlatformInterface::PointF を返します。

m31()、m32()、dx()、dy()、およびBasic Matrix Operationsも参照してください

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 ライセンスの下で利用可能です。
詳細はこちらをご覧ください。