[互联网]{BA31A039-9AB5-45F6-B194-0B19E7512A3A}第3章页面图形的描述.ppt_第1页
[互联网]{BA31A039-9AB5-45F6-B194-0B19E7512A3A}第3章页面图形的描述.ppt_第2页
[互联网]{BA31A039-9AB5-45F6-B194-0B19E7512A3A}第3章页面图形的描述.ppt_第3页
[互联网]{BA31A039-9AB5-45F6-B194-0B19E7512A3A}第3章页面图形的描述.ppt_第4页
[互联网]{BA31A039-9AB5-45F6-B194-0B19E7512A3A}第3章页面图形的描述.ppt_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/4/19,1,页面描述语言,主讲:樊丽萍 上海理工大学 出版印刷学院,2019/4/19,2,第三章 页面图形的描述,PostScript图形操作符 :,图形状态操作符:定义的全局框架; 坐标系和矩阵操作符:坐标转换(CTM) 路径构造操作符:定义形状和轨迹的当前路径 着色操作符:对图形元素进行着色; 字符和字库操作符:选择字符并着色字符; 设备设置和输出操作符:建立对应关系,2019/4/19,3,3.1 PS语言的成像模型,通过把颜色(颜料)着色到页面某个指定的区域来建立成像模型;,1.基本成像理论,着色区域:通过路径指定;(字母形状、线、图 形、取样图像等) 着色模型:由着色操作符产生的标记表示; 颜色(颜料):黑、白、灰度、彩色或图案等。,2019/4/19,4,2.当前页的特点:完全空白页(隐含) (showpage),3.着色操作符:, showpage:输出并重新设置当前页;,fill:用当前色对当前路径围起的区域着色;,stroke:使用当前色沿当前路径画线; image:把取样图像输出到页面上 show:着色字符;格式:string show,2019/4/19,5,4.页面描述的基本步骤 :,使用路径构造操作符创建路径;,设置图形状态参数,执行着色操作 使用输出操作符 showpage;,2019/4/19,6,%!ps %new301.ps /inch 72 mul def 1 inch 1 inch moveto 7.5 inch 1 inch lineto 7.5 inch 10 inch lineto 1 inch 10 inch lineto closepath 0.5 setgray fill showpage,例3.1:构造6.5*9英寸的矩形,0.5灰度填充,起 点为(1,1)英寸。,2019/4/19,7,3.2 图形状态(Graphicsstate),用于保存当前图形控制参数的数据结构,1图形状态,保存和恢复图形状态,图形状态栈:,gsave:把整个图形状态压入图像状态栈中保存,grestore:把整个图形状态从图像状态栈中弹出 使其成为当前图形状态。,VM,gstate:含有一个备份的图形状态,使用该操作 符创建新的gstate对象,setgstate:复制当前图形状态以代替gstate 对象的值,2019/4/19,8,例3.2:继例3.1,并以1英寸线宽描绘路径轮廓,%!ps %new302.ps /inch 72 mul def 1 inch 1 inch moveto 7.5 inch 1 inch lineto 7.5 inch 10 inch lineto 1 inch 10 inch lineto closepath gsave 0.5 setgray fill grestore 1.0 inch setlinewidth stroke showpage,构造路径,保存当前图形状态 设置颜色空间并填充 恢复保存的图形状态,设置线宽、缺省颜色画线 图形状态已改变,2019/4/19,9,%!ps %new3021.ps /inch 72 mul def 1 inch 1 inch moveto 7.5 inch 1 inch lineto 7.5 inch 10 inch lineto 1 inch 10 inch lineto closepath gstate currentgstate 0.5 setgray fill setgstate 1.0 inch setlinewidth stroke showpage,构造路径,设置线宽、缺省颜色画线 图形状态已改变,保存当前图形状态 设置颜色空间并填充 恢复保存的图形状态,2019/4/19,10,2. 图形状态参数,与设备无关的参数:用于页面的描述;,2019/4/19,11,2019/4/19,12,用于控制还原处理过程的细节,与设备有关的参数:,2019/4/19,13,3.3 坐标系和变换,路径和形状在当前页上用笛卡儿坐标系中的点来定义,1.用户空间和设备空间,默认的用户空间: 原点:输出页面左下角; 坐标轴方向:X轴水平向右; Y轴垂直向上; 单位长度:1/72英寸,用户空间(user space): PS语言中所使用的坐标系,独立与设备空间,2019/4/19,14,设备空间(device space),输出设备使用的坐标系;,2变换矩阵 CTM(Coordinate Transform Matrix): 定义了从用户空间到设备空间的坐标转换。,2019/4/19,15,单位矩阵:1 0 0 1 0 0,2019/4/19,16,缩放:若方程表示为:,平移:若方程表示为:,变换矩阵为:,变换矩阵为:,2019/4/19,17,旋转:若方程表示为:,变换矩阵为:,坐标轴绕原点逆时针方向旋转角,用户空间,设备空间,新CTM=变换矩阵旧CTM,2019/4/19,18,3坐标变换操作符,translate: 把用户空间的坐标原点平移到(tx ,ty),不改变坐标轴的单位与方向。,格式:tx ty translate,or tx ty matrix translate,matrix,2019/4/19,19, rotate :,把坐标轴绕当前用户空间的原点旋转一个角度,它不改变坐标轴的单位,格式:angle rotate,or angle matrix rotate,matrix,angle0,作逆时针旋转; angle0,作顺时针旋转;,2019/4/19,20, scale:,沿当前x,y方向修改单位长度,不改变原点位置和坐标轴方向。,格式:Sx Sy scale,or Sx Sy matrix scale,matrix,2019/4/19,21,例3.3:写出下列程序的运行结果,%!ps %new303.ps /box newpath 0 0 moveto 0 1 lineto 1 1 lineto 1 0 lineto closepath def gsave 72 72 scale box fill 2 2 translate,box fill 2 2 translate 45 rotate box fill grestore showpage,一个单位正方形路径,%作一个当前图形状态的备份,%坐标系单位放大72倍为1英寸,%释放原图形状态,回到缺省用户空间,%画一单位正方形路径,用当前色着色,%坐标原点平移到(2,2),2019/4/19,22,2019/4/19,23,3.4 路径的构造,1路径: 由相连或不相连的点、直线和曲线段构成的几何图形的集合;,2特点:路径的拓扑结构没有限制; 形状任意的;可以是凸形或是凹形的; 可以是包含多个封闭的子路径; 子路径可以按任意的的方式相交; 路径可分为闭合路径和开放路径; 路径控制着色操作符的作用范围。,2019/4/19,24,3.路径的构造,路径通过依次使用路径构造符来创建,每一个路径操作符以某种方法修改当前路径。,4路径的方向 取决于创建路径时的走向;,5路径的着色 执行着色操作符(stroke 、fill等)把路径输出到页面。,6路径操作符,2019/4/19,25,newpath: 使当前路径初始化为空,因而当前点也变成未定义;,moveto: 建立一个新的当前点,从当前路径开始建立新的子路径 ;,格式:x y moveto,x2 y2 moveto,x1 y1 moveto,2019/4/19,26,lineto:把一条直线段加到当前路径中;,格式:x y lineto,线从当前点画到用户空间中的(x ,y),然后将(x ,y)变为当前点。,(1,2),(3,4),1 2 moveto 3 4 lineto,2019/4/19,27,例3.4 编写程序 一边长为5英寸的、起点为(4英寸 2英寸)内部黑色填充并逆时针旋转450角的正方形。,%!ps %new304.ps /square newpath 0 0 moveto 5 0 lineto 5 5 lineto 0 5 lineto closepath def,72 72 scale 4 2 translate 45 rotate square fill showpage,72 36 scale,2019/4/19,28,2019/4/19,29,%new304.ps /inch 72 muldef /square newpath 0 inch 0 inch moveto 5 inch 0 inch lineto 5 inch 5 inch lineto 0 inch 5 inch lineto closepath def 4 inch 2 inch translate 45 rotate square fill showpage,(4,2),2019/4/19,30, rlineto:在当前路径中添加一条直线段,格式:dx dy rlineto,/square newpath 0 0 moveto 5 0 rlineto 0 5 rlineto -5 0 rlineto closepath def,dx、dy是相对于当前点(x ,y)的平移量(增量),使得(x+dx ,y+dy)变成新的当前点。,2019/4/19,31,arc:,增加一段沿逆时针方向绘制的圆弧到当前路径中;,格式:x y r 1 2 arc,圆弧的圆心为(x ,y), 半径为r 1:是从(x ,y)开始长度为 r的向量到圆的第一 端点之间的夹角; 2:是从(x ,y)开始长度为 r的向量到圆的第二 端点之间的夹角;,(x ,y),r,1,2,2019/4/19,32,若当前路径是空的,没有当前点那么arc操 作符就不产生初始的直线段。,注意:,若有当前点,那么arc 操作符先形成一条当 前点到第一端点的直线,然后再把弧本身加 入到当前路径中;,在任何情况下,弧的第二个端点都成为当前点 。,2019/4/19,33,例3.5 写出下列程序执行的结果, %!ps %new3051.ps /inch 72 mul def newpath 0 0 moveto 0 0 4 inch 15 60 arc closepath fill showpage,2019/4/19,34,%!ps %new3052.ps /inch 72 mul def newpath 0 0 4 inch 15 60 arc closepath fill showpage,%!ps %new3053.ps /inch 72 mul def 4 inch 4 inch translate newpath 0 0 4 inch 0 360 arc closepath stroke showpage,2019/4/19,35, arcn:,增加一段沿顺时针方向绘制的圆弧到当前路径中;,格式:x y r 1 2 arcn,%!ps %new3054.ps /inch 72 mul def newpath 0 0 4 inch 0 90 arc 0 0 2 inch 90 0 arcn closepath gsave fill grestore 1 0 0 setrgbcolor stroke showpage,2019/4/19,36,arct:增加一段圆弧到当前路径,格式:x1 y1 x2 y2 r arct,在圆弧前面可能有一条直线.(除非这两点 重合(x0 ,y0)和(xt1 ,yt1),r,如果当前点未定义,则程序报错, (xt2 ,yt2)将成 为新的当前点,若两条切线在同一条直 线上,则arct只增加一 条(x0 ,y0)到(x1 ,y1)的 直线段。,2019/4/19,37,例3.6写出下列程序执行的结果,%!ps %new306.ps /arct1 newpath 0 0 moveto 0 4 4 4 1 arct 4 4 lineto def 36 36 scale 2 2 translate arct1 stroke showpage,%当前的线宽为36磅,2019/4/19,38,arcto:,与arct产生相同的效果,在用户空间中返回 两个切点坐标(xt1 ,yt1)和(xt2 ,yt2);,格式:x1 y1 x2 y2 r arcto,xt1 ,yt1, xt2 ,yt2,注意:arcto不允许作为用户路径的元素。,2019/4/19,39,curveto:增加一条Bezier曲线段到当前路径中,格式:x1 y1 x2 y2 x3 y3 curveto,必须定义当前点 (x3 ,y3)为新的当前点,2019/4/19,40,例3.7写出下列程序运行结果,%!ps %new307.ps /DrawHeart /size exch def /offset size 3 div def 0 0 moveto size size offset size offset add 0 size curveto offset neg size offset add size neg size 0 0 curveto def,72 72 scale 4 1 translate 3 DrawHeart 1 0 0 setrgbcolor fill showpage,(3 3 1 4 0 3) (-1 4 -3 3 0 0),2019/4/19,41,(0,3),2019/4/19,42,removeto、rcurveto 和rlineto:,它们与moveto、curveto 和lineto有相同的操作,当其操作数为当前点的相对量。,closepath: 增加一条连接当前点该子路径的起始点的线段来完成封闭当前子路径。,2019/4/19,43,例3.8,构造一个上底为1单位,下底为2单位,高为1单位的梯形,将该梯形黑色填充,并复制至(3,6)。单位:英寸。,2019/4/19,44,%!ps %new308.ps /trapezia newpath 0 0 moveto 0.5 1 lineto 1.5 1 lineto 2 0 lineto closepathdef,gsave 72 72 scale trapezia fill 3 6 translate trapezia fill grestore showpage,2019/4/19,45,例3.9,%!ps %new309.ps /inch 72 mul def 3 inch 3 inch translate 60 rotate 10 setlinewidth 2 1 scale 0 0 1 inch 0 360 arc closepath 0.5 1 scale stroke showpage,画长半轴为2英寸,短半轴为1英寸,线 宽为10磅,与X轴的倾斜度为60的椭圆,2019/4/19,46,3.5 着色与图形生成,1.描绘路径(stroke),线的颜色,setgray,sethsbcolor,setcmykcolor,setrgbcolor,2019/4/19,47,线宽,格式: num setlinewidth (num = 0),线的端点形态,格式:int setlinecap 其中 int = 0、1、2;,int = 1; 端点处是一个直径为线宽的半圆,并用当前色填充,int = 2; 端点处伸长半个线宽的距离,然后呈正方形轮廓,int = 0; 笔划在路径的端点处呈正方形,没有超出路径端点的投影,2019/4/19,48,线段的相交形状,格式:int setlinejoin 其中 int = 0、1、2;,int = 0; 两个线段笔划的外边向外延伸,直到两个外边相交成一个角度。若相交角度很小,就用平头斜接替代它,int = 1: 在两个线段的连接处是一个直径为线宽的圆弧,用当前色填 充该圆弧。,int = 2: 相接的路径用平头来结束,平头宽为线的宽度.,2019/4/19,49,线型,格式:array offset setdash,若array为空,则stroke产生一段实线; 若array不空,则stroke产生一段虚线;,array:中的元素依次解释为沿着路径的距离, 这些距离交替定义虚线的长度以及两条 虚线之间的间隔。,offset:可以认为是相对于路径开始点的线型 的“相位”(phase);它被解释为进入 线型的距离,从这点开始应该按线型 来绘制一个路径。,2019/4/19,50, 0 setdash :表示构造一实线,3 0 setdash:以3为间隔的虚线,2 1 setdash:以2为间隔的虚线,3 5 6 setdash:以5为间隔的虚线,2019/4/19,51,例310 写出下列程序的运行结果,%!ps %new310.ps /inch 72 muldef 2 inch 2 inch moveto 4 inch 0 rlineto 0 4 inch rlineto -4 inch 0 inch rlineto closepath 10 setlinewidth 2 setlinejoin,gsave stroke grestore gsave 1 setlinecap 0.7 setgray 20 0 setdash stroke grestore showpage,2019/4/19,52,由黑色和灰色线段构成的边长为4英寸的,四边相交为平头斜接,其中灰色线段(灰度值0.7)的端头为圆头,黑灰相间为30:10;线宽为10的正方形,(2,2),单位:英寸,2019/4/19,53,2019/4/19,54,2.填充路径:,内点判断规则 :,非零环绕计数规则(fill ) (non-zero winding number rule),先任意指定一点,然后从该点向任意方向画一条射线到无穷远处,并检查路径段与射线交点,从0开始计数,如果路径段从左到右穿过射线,计数器加1;否则,如果路径段从右到左穿过射线,计数器减1。在对所有交点计数后,若结果为0,则该点在路径之外;若结果为非0,则该点在路径内部。,2019/4/19,55,同向,异向,2019/4/19,56,奇偶规则(even-old rule)(eofill),从任意点出发,沿任意方向画一条射线,然后计算该路径与射线的交点数目,若交点数为奇数,则点为该路径的内点;若交点数为偶数,则该点不属于路径的内点,不会被填充。,2019/4/19,57,例311 构造内圆半径为2、外圆半径为3的黑色圆环,%file311.ps 72 72 scale 4 4 translate 0 0 2 0 360 arc 0 0 3 360 0 arcn fill showpage,72 72 scale 0 0 3 0 360 arc fill 1 setgray 0 0 2 0 360 arc fill showpage,%file311.ps,4 4 translate,%!ps %new311.ps 72 72 scale 4 4 translate 0 0 3 0 360 arc fill 1 setgray 0 0 2 0 360 arc fill showpage,2019/4/19,58,%!ps %new3112.ps 72 72 scale 4 4 translate 0 0 2 0 360 arc 0 0 3 0 360 arc eofill showpage,%!ps %new3111.ps 72 72 scale 4 4 translate 0 0 2 0 360 arc 0 0 3 360 0 arcn fill showpage,2019/4/19,59,3.快速图形的生成方式,rectfill: 填充由操作数描述的由一个或多个矩形构造 的路径。,格式:x y width height rectfill numarray rectfill numstring rectfill,无论操作数是正是负,PS解释器总是以逆时针方向画出矩形,若有相交,按非零环绕原则填充。 矩形的起点坐标会根据width和height变化。,2019/4/19,60,rectstroke:,对操作数描述的由一个或多个矩形构造的路径进行描绘。,格式:x y width height rectstroke numarray rectstroke numstring rectstroke,特点: 同时完成路径的创建和着色;,对当前路径不产生影响,2019/4/19,61,%!ps %new312.ps 72 72 scale 0.125 setlinewidth 1 1 3.5 2 5.5 1 2 4 4.5 8 3 2 1 5 2 5 rectstroke showpage,例3.12写出下列程序结果,?,2019/4/19,62,3.6 裁剪路径的使用,裁剪路径:定义成像区域的边界,1.clip操作符,裁剪路径操作符将当前路径和当前裁剪路径按某种填充原则求其交集。定义成像区域边界。,将当前开放路径处理为封闭路径,不改变路径 本身; 允许当前路径是空的; 当前路径不变,根据非零环绕规则把所有位于这两个路径内部的区域设置为新的裁剪路径。,2019/4/19,63,例313 写出下列程序运行结果,%!ps % new313.ps /inch 72 mul def /ellipse 0 0 1 inch 0 360 arcdef 4.25 inch 5.5 inch translate 2 1 scale 0.1 inch setlinewidth ellipse clip stroke 0.5 2 scale ellipse fill showpage,2019/4/19,64,2.eoclip操作符,eoclip操作符使当前裁剪路径的内部与当前路径的内部相交从而产生一个新的裁剪路径;当前路径的内部由奇偶规则决定,而当前裁剪路径的内部则根据建立路径时使用的规则决定。,2019/4/19,65,3 inch 3 inch 0 2 inch 1 inch DrawEllipse 3 inch 3 inch 45 2.5 inch 1 inch 4.5 inch 4.5 inch moveto DrawEllipse eoclip fill showpage,例3.14:写出下列程序结果,%!ps %new314.ps /inch 72 muldef /DrawEllipse /CTMSave matrix currentmatrix def 5 3 roll translate 3 2 roll rotate scale 0 0 1 0 360 arc closepath CTMSave setmatrix def,?,作用?,2019/4/19,66,6.5 7 moveto 40 rotate 2 0 rlineto 0 3 rlineto -2 0 rlineto closepath gsave 0.5 setgray fill grestore 0.25 setlinewidth stroke showpage,%!ps %new315.ps 72 72 scale 3.75 6 2 0 360 arc closepath 0.5 0.5 moveto 2 0 rlineto 0 3 rlineto -2 0 rlineto closepath,例3.15(P79),2019/4/19,67,路径不一定是连接的,可以由几个分离的子路径构成;但一定要注意设置新的当前点。,2019/4/19,68,15 -1 inch moveto 0 -1 inch 15 0 360 arc 15 1 inch moveto 0 1 inch 15 0 360 arc eofill 0 0 2 inch 270 90 arc stroke showpage,%!ps %new316.ps /inch 72 muldef 3 inch 3 inch translate 0 0 2 inch 90 270 arc 0 -1 inch 1 inch -90 90 arc 0 1 inch 1 inch 270 90 arcn,例3.16(P80),2019/4/19,69,2019/4/19,70,2问:2 2 scale前移一行对图形影响; 3问:修改为2 1 scale?,习题, %exce301.ps /square newpath 0 0 moveto 90 0 lineto 90 90 lineto 0 90 lineto closepath fill def 300 300 translate 60 rotate 100 100 translate 2 2 scale square showpage,1写出下列程序的运行结果,1问:增加matrix后对图形的影响,(3 0 3 0 100 100 ),2019/4/19,71,%!ps %exce302.ps /circle newpath 0 0 2 0 90 arc 0 0 1 90 0 arcn closepath def gsave 72 72 scale 2 2 translate circle fill 4 0 translate 90 rotate circle fill showpage,问:将grestore移到此处对图形有何影响?为什么?,grestore,grestore,2019/4/19,72,%exce303.ps /inch 72 muldef /DrawEllipse /CTMSave matrix currentmatrix def 5 3 roll translate 3 2 roll rotate scale 0 0 1 0 360 arc closepath CTMSave setmatrix def,4 inch 4 inch 0 3 inch 1 inch DrawEllipse stroke 4 inch 4 inch 60 3 inch 1 inch DrawEllipse stroke 4 inch 4 inch 120 3 inch 1 inch DrawEllipse stroke showpage,2019/4/19,73,%!ps %exce304.ps /rectangle 0 0 moveto 4 0 lineto 4 2 lineto 0 2 lineto closepathdef 72 72 scale 2 2 translate rectangle,3 -1 translate 90 rotate rectangle eoclip fill showpage,2019/4/19,74,line closepath 10 setlinewidth 1 setlinejoin gsave stroke grestore 20 10 0 setdash 0.5 setgray stroke CTMSave setmatrix 4 inch h inch r inch 0 360 arc fill showpage,%!ps %exce305.ps /inch72 mul def /CTMSave matrix currentmatrix def /h 3 sqrt 1 add def /r h 1 sub def /line 6 inch 0 lineto 6 inch 0 translate def 1 inch 1 inch translate 0 0 moveto line 120 rotate,2019/4/19,75,2.编写程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论