后记语言中的Concat命令

时间:2014-01-06 16:11:21

标签: postscript

我正在使用postscript以及

绘制一个简单的矩形
1 -1 scale
0 -300 translate
newpath 88.9 117.25 moveto   131.6 117.25 lineto
88.9 259.75 lineto closepath  fill 88.9 117.25 moveto   111.4 94.75
lineto154.1 94.75 lineto 131.6 117.25 lineto closepath  fill 131.6
117.25 moveto   154.1 94.75 lineto 154.1 237.25 lineto 131.6 259.75 
lineto closepath  fill
%%EndDocument

结果是一个3D矩形。

但是当我添加以下代码时,矩形会以某种角度倾斜。

[ 0.9999999 0 -1 1 261 0 ] concat

我可以理解这种行为是由于与CTM连接的矩阵中使用的值引起的。任何人都可以解释上面矩阵中值的使用以及它如何影响绘图行为吗?

编辑:

非常感谢您提供的信息。实际上,我正在使用post script将位图转换为eps。为此,我将在Graphics对象上执行的所有操作转换为等效的post script命令。

我将C#中的g.Transform=matrix转换为帖子脚本中的[ matrix.Elements[0] ...... [matrix.Elements[5] ] concat。从我用Google搜索来看,两者在功能上看起来与我相似,但绘制的eps的结果与位图图像不同。所以,我想知道postscript矩阵concat转换是如何工作的。任何人都可以解释我转换为eps的方法出了什么问题吗?

1 个答案:

答案 0 :(得分:5)

CTM是Current Transformation Matrix,通常是3x3矩阵。在Postscript中,它表示为6元素数组,因为3x3 CTM中的3个元素是常量。 Postscript CTM数组

[a b c d tx ty] 

对应于3x3 CTM矩阵

 a  b  0
 c  d  0
 tx ty 1

虽然它经常以换位形式出现(如链接文章中所述):

 a  c  tx
 b  d  ty
 0  0  1

在任何情况下,txty控制翻译,其他值组合用于其他转换。一些abcd模式导致命名转换:旋转,缩放,反射和剪切。你给出的那个符合剪切模式(如果我们将0.9999999视为1):1 0 k 1,其中k是剪切量,在你的情况下是-1。