基本的なデータ型_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

移動