C
Qul::PlatformInterface::Transform Class
class Qul::PlatformInterface::TransformTransform クラスは、座標系の 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クラスは乗算および等価比較をサポートしています。
基本的な行列演算
m11 | m12 | m13 |
|---|---|---|
m21 | m22 | m23 |
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::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()
デフォルトコンストラクタは、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 ライセンスの下で利用可能です。
詳細はこちらをご覧ください。