このページでは

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% 増加します。
  • m11 、m22 、および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オブジェクトを作成します。

m11 、m22 (スケールを指定)、および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 と、m11 、m12 、m21 、m22 、dx 、dy という因数を用いて、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オブジェクトを構築します:m11 、m12 、m13 、m21 、m22 、m23 、m31 、m32 、m33 。

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