基本的なデータ型_MATRIX_レコード - hsk/swfspec_ja GitHub Wiki
MATRIX レコード
MATRIXレコードは、一般的に、2Dグラフィックスで使用される種類の標準2×3変換行列を表す。 これは、グラフィックオブジェクトのスケール、回転、および変換を記述するために使用される。 MATRIXレコードはバイトアラインする必要があります。
| フィールド | 型 | コメント |
|---|---|---|
| HasScale | UB[1] | 1の場合scale値を持つ |
| NScaleBits | HasScale = 1の場合、 UB[5] | 各scale値フィールドのビット |
| ScaleX | HasScale = 1の場合、FB[NScaleBits] | x scale 値 |
| ScaleY | HasScale = 1の場合、FB[NScaleBits] | y scale 値 |
| HasRotate | UB[1] | 1の場合rotateとskew値を持つ |
| NRotateBits | HasRotate = 1の場合 UB[5] | 各rotate値フィールドのビット |
| RotateSkew0 | HasRotate = 1の場合 FB[NRotateBits] | 最初のrotateとskew値 |
| RotateSkew1 | HasRotate = 1の場合 FB[NRotateBits] | 2つ目のrotateとskew値 |
| NTranslateBits | UB[5] | 各translate値フィールドのビット |
| TranslateX | SB[NTranslateBits] | twipsでのx translate 値 |
| TranslateY | SB[NTranslateBits] | twipsでのy translate 値 |
ScaleX、ScaleY、RotateSkew0、RotateSkew1フィールドは16.16固定小数点値として保存されます。 TranslateXとTranslateYの値はtwip単位で符号付きの値として保存されます。 MATRIXレコードは、唯一の変換を行うマトリックスとして一般的なケースのために最適化されています。 この場合、HasScaleとHasRotateフラグはゼロであり、行列だけ移動Xと移動Yのフィールドが含まれています。 次のように2×3行列にMATRIXフィールドからのマッピングは次のとおりです。
ScaleX RotateSkew0
RotateSkew1 ScaleY
TranslateX TranslateY
次のように任意の座標(x、y)は、変換された座標(x'、y')に変換される:
x' = x * ScaleX + y * RotateSkew1 + TranslateX
y' = x * RotateSkew0 + y * ScaleY + TranslateY
以下の表は、マトリックスのメンバーが各種動作のために使用される方法を説明します:
| ~ | ScaleX | RotateSkew0 | RotateSkew1 | ScaleY |
|---|---|---|---|---|
| Rotation | Cosine | Sine | Negative | sine |
| Scaling | Horizontal scaling component | Nothing | Nothing | Vertical scaling component |
| Shear | Nothing | Horizontal proportionality constant | Vertical proportionality constant | Nothing |
| Reflection | Horizontal reflection component | Nothing | Nothing | Vertical reflection component |