阅读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
andRotation
一起使用,但是当我尝试同时使用时,Scaling
还是Skewing
出现了严重错误。也许我错误地使用了 CTM,或者甚至我的数学已经关闭了。我试图在坐标位置 (50, 50) 创建文本,旋转 45 度,缩放 2(按此顺序)。我之所以说“按那个顺序”是因为规范指出转换的排序会产生影响(规范给出了基于转换排序的差异的图形示例)。那么流对象会是什么样子和/或矩阵数学将如何应用在这里?
工作((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 ]
数学似乎是正确的,除了现在文本从坐标 (100, 100) 而不是 (50, 50) 开始。这对我来说似乎不正确,因为我试图从 (50, 50) 开始,旋转 45 度,然后将其缩放 2。