Adobe PDF 1.7 (ISO 32000-1:2008) 仕様を読んだ後でも、変換マトリックスを適切に作成する方法を理解するのにまだ苦労しています。
セクション 4.2/4.3 の仕様には、次のように記載されています。
• 平行移動は [ 1 0 0 1 tx ty ] として指定されます。ここで、tx と ty は、座標系の原点をそれぞれ水平方向と垂直方向に平行移動する距離です。
• スケーリングは [ sx 0 0 sy 0 0 ] によって取得されます。これにより、新しい座標系の水平および垂直寸法の 1 単位が、前の座標系の sx および sy 単位とそれぞれ同じサイズになるように、座標がスケーリングされます。
• 回転は [ cos θ sin θ −sin θ cos θ 0 0 ] によって生成され、座標系の軸を反時計回りに角度 θ だけ回転させる効果があります。
• 傾きは [ 1 tan α tan β 1 0 0 ] で指定されます。これは、x 軸を角度 α だけ、y 軸を角度 β だけ傾けます。
これを考えると、相互に順番に変換を使用するにはどうすればよいでしょうか?
Translation
と を一緒に使用することはできますが、orRotation
も使用しようとすると、問題が発生します。おそらく、CTM の使い方が間違っているか、計算が間違っているのかもしれません。座標位置 (50, 50) に 45 度の回転と 2 のスケーリング (この順序で) でテキストを作成しようとしています。「その順序で」と述べる理由は、仕様が変換の順序が違いを生むと述べているためです (仕様は、変換の順序に基づく違いのグラフィカルな例を示しています)。では、ストリーム オブジェクトはどのように見えるのでしょうか?また、行列の数学はどのように適用されるでしょうか?Scaling
Skewing
作業 ((50, 50) の変換 + 45 度回転)
[ 1 0 0 ] [ 0.707 0.707 0 ] [ 0.707 0.707 0 ]
[ 0 1 0 ] x [ -0.707 0.707 0 ] = [ -0.707 0.707 0 ]
[ 50 50 1 ] [ 0 0 1 ] [ 50.000 50.000 1 ]
BT
0.707 0.707 -0.707 0.707 50 50 Tm
/F1 36 Tf
(Hello, World!) Tj
ET
スケーリングを追加するために行列乗算を実行しようとすると、うまくいかないようです:
[ 0.707 0.707 0 ] [ 2 0 0 ] [ 1.414 1.414 0 ]
[ -0.707 0.707 0 ] x [ 0 2 0 ] = [ -1.414 1.414 0 ]
[ 50.000 50.000 1 ] [ 0 0 1 ] [ 100.000 100.000 1 ]
テキストが (50, 50) ではなく座標 (100, 100) から始まることを除いて、数学は正しいようです。(50, 50) から開始し、45 度回転させてから 2 倍にスケーリングしようとしているので、これは私には正しくないようです。