このページでは

C

Qul::PlatformInterface::Transform Class

class Qul::PlatformInterface::Transform

Transformクラスは、座標系の2次元変換を指定する。詳細...

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 x 3行列を含む。ここで

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

Transformを構成するときに、さまざまな行列要素を設定することができる。また、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 に設定す る と 、 高 さ が 2 倍にな り 、 幅が 50% 広が り ます。
  • 同一性変換は、m11m22m33 を 1 に設定し(他はすべて 0 に設定)、点をそれ自体にマッピングします。
  • 剪断はm12m21 で制御します.こ れ ら の要素を 0 以外の値に設定す る と 、 座標系が捻 ら れます。
  • 回転は、 シ ア リ ン グ係数 と 拡縮係数を設定す る こ と に よ っ て行 う こ と がで き ます。
  • 遠近変換は、射影 と 縮尺係数を設定す る こ と に よ っ て行 う こ と がで き ます。

注意事項

  • 内部トランスフォーム表現は、トランスフォーム合成の順序を変更する転置行列を使用します。
  • ベクトル(V)(x, y, 1)にTransform(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 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::ScaleRotation5scale、rotate、そしてtranslate。
Qul::PlatformInterface::Transform::Shear6回転し、(不均一に)拡大縮小し、そして平行移動する。
Qul::PlatformInterface::Transform::Project7任意の投影変換

メンバ関数ドキュメント

Transform::Transform()

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

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

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

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

与えられたtype と係数で Transform オブジェクトを構築する:m11 m12,m21,m22,dx およびdy

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)

与えられたsxsy のスケールファクタを持つ Transform オブジェクトを返します。

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

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

与えられたdxdy の変換係数を持つ 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の因子が既知の最適化された型の1つに適合する場合、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

この変換のコピーを,与えられたxy の係数で変換して返します。

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 ライセンスの下で利用可能です。
詳細を見る。