- 1
- 0
- 约6.2千字
- 约 32页
- 2017-08-20 发布于北京
- 举报
第三章 输出图元 Output Primitives 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵(XY) ,如何生成 划线设备:笔式绘图机 坐标系 世界坐标系 设备坐标系 本章主要介绍 二维图元的算法 点 直线 圆 曲线 填充域 增量法 y=mx+b m为斜率,b为截距,设二端点分别为(x1,y1),( x2,y2) ?y=y2- y1 , ?x =x2-x1 m= ?y/ ?x 对于任意的δy, δy=mδx 则δx=δy/m 讨论:︱m︱1 由δx定δy的偏转电压 ︱m︱1 由δy定δx的偏转电压 DDA算法Digital Differential Analyzer y=mx+b m为斜率,b为截距,设二端点分别为(x1,y1),( x2,y2) ?y=m ?x 若0m≤1,设?x=1,则 xk+1=xk+1, yk+1=yk+m (取整) 若m1,设?y=1,则 yk+1=yk+1 xk+1=xk+1/m, 以上推导是基于自左向右划线,若自右向左划线, 若0m≤1可设?x=-1 yk+1=yk-m 若m1, ?y=-1, xk+1=xk-1/m, 若m0,分 |m|1 和|m|1 两种情况讨论之。 程序示例 中点划线算法 线段二端点(x0,y0),(x1,y1);m1,P(xp,yp)已定 M为p1,p2的中点;M(xp+1,yp+0.5) M在Q的下方,应取 P2 (xp+1,yp+1) M在Q的上方,应取 P1 (xp+1,yp) 考查一次函数F(x,y)=ax+by+c a=y0-y1 b=x1-x0,c=x0y1-x1y0 对任一点(x,y),若 F(x,y)=0,点(x,y)在直线上; F(x,y)0,点(x,y)在直线上方; F(x,y)0,点(x,y)在直线下方; 令d=F(M)=a(xp+1)+b(yp+0.5)+c d0,M在直线的下方,取P2点 (只与d的符号有关) d0,M在直线的上方,取P1点 中点划线算法(续) 求d的增量 若取P1点,d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)+c=d+a 若取P2点,d2=F(xp+2,yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b 初始时: d0=F(x0+1,y0+0.5)=F(x0 , y0)+a+0.5b=a+0.5b 以2d代d,算法: d0=2*a+b di≧0 (取P1), xi+1=xi+1, yi+1=yi, di+1=di+2a di0 (取P2), xi+1=xi+1, yi+1=yi+1, di+1=di+2(a+b) 重复2,直到xi+1≧x1. 斜率|m|1,1……中点取法 例题P1 (0,0) P2 (5,2) 中点画圆算法 圆的特征 (x-xc)2+(y-yc)2 =r2 直接计算,计算量大,点间距不一致 圆的八对称性 考虑点(0,r)右下方的1/8圆周 中点圆算法 算法思想: f(x,y)=x2+y2-r2 M(xk+1,yk-0.5) pk =f(M)=f(xk+1,yk-0.5)= (xk+1)2+(yk-0.5)2- r2 pk+1=f(xk+1+1,yk+1-0.5)= (xk+1+1)2+(yk+1-0.5)2 -r2 =pk+2(xk+1)+(yk+12- yk2)- (yk+1- yk)+1 if (pk0) yk+1=yk xk+1=xk+1 pk+1= pk+2(xk+1)+1= pk+2xk+1+1 if (pk=0) yk+1= yk-1 xk+1=xk+1 pk+1=pk+2xk+1+1-2yk+1 =pk+2xk+1 -2yk+1 +1 ( 2xk+1= 2xk+2; 2yk+1= 2yk- 2) p0=f(1,r-0.5)=1+(r-0.5)2-r2=1.25-r = 1-r (if r is an integer) 中点画圆算法步骤 输入(xc,yc),r, 画第一个点(0,r), p0=1-r if (pk0) yk+1=yk xk+1=xk+1 pk+1=pk+2xk+1+1 if (pk=0) yk+1= yk
原创力文档

文档评论(0)