C
Qul::PlatformInterface::Transform Class
class Qul::PlatformInterface::TransformTransformクラスは、座標系の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 クラスは乗算と等式比較をサポートしています。
基本的な行列演算
m11 | m12 | m13 |
|---|---|---|
m21 | m22 | m23 |
m31 (dx) | m32 (dy) | m33 |
Transformオブジェクトは3 x 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)に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::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 | scale、rotate、そしてtranslate。 |
Qul::PlatformInterface::Transform::Shear | 6 | 回転し、(不均一に)拡大縮小し、そして平行移動する。 |
Qul::PlatformInterface::Transform::Project | 7 | 任意の投影変換 |
メンバ関数ドキュメント
Transform::Transform()
デフォルトのコンストラクタは、Identity 型の Transform オブジェクトを作成します。
m11 とm22 (スケールを指定する)、および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
水平剪断係数を返します。
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
除算係数を返します。
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の因子が既知の最適化された型の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
この変換のコピーを,与えられた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 ライセンスの下で利用可能です。
詳細を見る。