上海师范大学计算机图形学第二章.ppt

上传人:cl****1 文档编号:571811100 上传时间:2024-08-12 格式:PPT 页数:66 大小:367.50KB
返回 下载 相关 举报
上海师范大学计算机图形学第二章.ppt_第1页
第1页 / 共66页
上海师范大学计算机图形学第二章.ppt_第2页
第2页 / 共66页
上海师范大学计算机图形学第二章.ppt_第3页
第3页 / 共66页
上海师范大学计算机图形学第二章.ppt_第4页
第4页 / 共66页
上海师范大学计算机图形学第二章.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《上海师范大学计算机图形学第二章.ppt》由会员分享,可在线阅读,更多相关《上海师范大学计算机图形学第二章.ppt(66页珍藏版)》请在金锄头文库上搜索。

1、二.绘图函数 1.点 void putpixel(int x,int y,int color); color 符号名,取值为015 void moveto(int deltax,int deltay);例题: 当前坐标CP putpixel(100,200,5); (100,200) moveto(50,30); (50,30) moverel(10,20); (60,50) int getx(void); int gety(void);2.直线 void line(int x0,int y0,int x1,int y1); 当前坐标(x,y) void lineto(int x,int y)

2、; void linerel(int deltax,int deltay); 当前坐标 (x+deltax,y+deltay) 例题:arc(40,40,0,120,30);3.矩形 void rectangle(int left,int top,int right,int bottom); 左上角坐标(left,top); 右下角坐标(right,bottom);5.多边形 void drawpoly(int numpoints,int *polypoints); numpoints:为多边形的顶点数polypoints:各顶点坐标的整数序列共有2*numpoints个整数,若第一个点和最后

3、一个点坐标相同,则画出封闭多边形,否则为多边形折线多边形例题 int p2*6=45,50,75,30,85,75,180,65,70,5,45,50; drawpoly(6,p);(45,50)三.颜色控制 1.void setbkcolor(int color); 默认色为黑色 2.void setcolor(int color); 设置当前画线颜色,默认色为白色(15) 3.int getbkcolor(void); 返回当前背景色 4.int getcolor(void); 返回当前绘图颜色 5.int getpixel(int x,int y);4. 圆,圆弧和椭圆 void cir

4、cle(int x,int y,int radius); void arc(int x,int y,int stangle,int endangle,int radius); 起始角stangle ,终止角endangle 0。-360。 void ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius);从起始角stangle开始画椭圆弧至终止角endangle,xradius,yradius分别为方向x,y的半径0 BLACK1 BLUE2 GREEN3 CYAN 4 RED5 MAGENTA6 BROWN7

5、 LIGHTGRAY8 DRAKGRAY9 LIGHTBLUE10 LIGHTGREEN11 LIGHTCYAN12 LIGHTRED13 LIGHTMAGENTA14 YELLOW15 WHITE 6. void setlinestyle(int linestyle,unsigned upattern,int thickness);Linestyle取值: SOLID-LINE 0 实线 DOTTED-LINE 1 点线 CENTER-LINE 2 中心线 DASHED-LINE 3 虚线 USERBIT-LINE 4 用户定义的线 upattern仅在userbit-line时起作用thi

6、ckness线宽 NORM-WIDTH 1 一个象素宽 THICK-WIDTH 3 三个象素宽例题: setlinestyle(DASHED-LINE,0,THICK-WIDTH);或 setlinestyle(3,0,3); line(300,50,300,200);上机作业2: 画出如下图形第二章 基本图形的生成和计算 如何在指定的输出设备上描述构造基本二维几何图形(点、直线、圆、椭圆、多边形、字符串及其相关属性等)2.1 直线的生成算法图形的扫描转换图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。 用一系列的象素点来逼近直线2.1 直线的生成算法2.1.1直

7、线DDA算法(Digital Differential Analyser) 设直线起点(x1,y1),终点(x2,y2)xy(x1,y1)(x2,y2)则斜率mm= (y2-y1)/(x2-x1)=dy/dxxy(x1,y1)(x2,y2)dydxxy(x1,y1)(x2,y2)dydxdy/dx=Dy/Dxxi+1 =xi+Dxyi+1 =yi+DyDy=m*Dx(xi,yi)(xi+1,yi+1)DxDyxy1b1a4a4b3b3a2a2bxi+1 =xi+1yi+1 =yi+mxi+1 =xi-1yi+1 =yi-m(x1,y1)(x2,y2)Oxi+1 =xi+1/myi+1 =yi+

8、1象限 Dx Dy 象限 Dx Dy1a 1 m 4a 1 -m1b 1/m 1 4b 1/m -12a -1 m 2b -1/m 13a -1 -m3b -1/m -1结论: 1.当|m|1时,|Dx|=1,|Dy|=m 否则|Dx|=1/m,|Dy|=1结论:2.Dx,Dy的符号与dx,dy的符号相同。缺点: 1.浮点增量的连续迭加,误差积累使长线段计算的象素位置偏离实际线段 2. 浮点运算十分耗时1965年由Bresenham提出设直线起点(x1,y1),终点(x2,y2)y=mx+bb=y1-m*x1m=(y2-y1)/(x2-x1)=dy/dx2.1.2 直线Bresenham算法1

9、312111010111213(11,11)(12,11)或 (12,12)当直线方向限于1a象限(x1,y1)(x2,y2)当直线方向限于1a象限,则xi+1=xi+1 yi+1yi+1d2,则yi+1=yi+1,否则yi+1=yid1=y-yi d2=yi+1-yd1-d2=2y-2yi-1y=m(xi+1)+bm=dy/dx d1=y-yi d2=yi+1-yd1-d2=2dy/dx(xi+1)+2b-2yi-1 两边*dx , 令Pi=(d1-d2)dx 则Pi=2dy(xi+1)+2b*dx-2yi*dx-dx =2xidy-2yidx+2dy+(2b-1)dx 由于dx0,则Pi可

10、用来判断符号 Pi+1=2xi+1dy-2yi+1dx+2dy+(2b-1)dx =2 (xi+1)dy- 2yi+1dx+2dy+(2b-1)dx = Pi+2dy-2yi+1dx+ 2yidx = Pi+2dy-2(yi+1-yi)dxPi=2xidy-2yidx+2dy+(2b-1)dxP1=2x1dy-2y1dx+2dy+(2b-1)dx =2x1dy-2y1dx+2dy+2(y1-(dy/dx)x1)-1dx =2x1dy-2y1dx+2dy+2y1dx-2x1dy-dx =2dy-dxPi=2xidy-2yidx+2dy+(2b-1)dxb=y1-m*x11.画点(x1,y1) d

11、x=x2-x1 dy=y2-y1 P1=2dy-dx i=12.xi+1=xi+1 当Pi0, 则 yi+1=yi+1 ,否则yi+1=yi3.画点(xi+1, yi+1) 画线步骤:P1=2dy-dx4.求Pi+1, 当Pi0 则 Pi+1=Pi+2dy-2dx 否则Pi+1=Pi+2dy5.i=i+1 如i0,且m1,则交换x,y之间规则2.2 圆的生成算法2.2.1基础知识 设圆心坐标(xc,yc), 半径 r 1. 直角坐标法 (x- xc)2+(y- yc)2=r2 y= yc(r2- (x- xc)2)1/2 x- xc从-rr作加1递增,可求出y坐标但圆周上的点不均匀即象素位置间

12、的间距不一致。122.2 圆的生成算法2.极坐标法 x=xc+rcos y=yc+rsinr0,/4, 利用对称法则 (x,y)yy=-xy=x(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)2.2 圆的生成算法2.2.2 圆的Bresenham算法 Bresenham圆算法通过比较象素与圆的距离的平方而避免了平方根运算。设圆心坐标(0,0) 半径为r起点(0,r) 顺时针方向1/8圆周xi+1=xi+1 yi+1=yi或yi+1=yi-1xyxixi+1yiyyi-1d21/2d11/22.2 圆的生成算法y2=r2-(xi+1)2d1= yi2-y2=

13、 yi2- r2+(xi+1)2d2= y2-(yi-1)2= r2-(xi+1)2- (yi-1)2令Pi=d1-d2 =2 (xi+1)2+ yi2+(yi-1)2-2r2 Pi+1= Pi+4xi+6+2(yi+12+1-yi2)-2(yi+12+1-yi2) 当P0,则yi+1= yi,否则yi+1= yi-12.2 圆的生成算法Pi+1=2(xi+2)2+yi+12+(yi+1-1)2-2r2 =2 (xi+1)2+4xi+6+yi+12+ (yi+1-1)2-2r2 = Pi+4xi+6- yi2-(yi-1)2+ yi+12+(yi+1-1)2 = Pi+4xi+6+2(yi+1

14、2- yi2)-2(yi+1- yi) 当P1(x1=0,y1=r) P1=2+r2+(r-1)2-2r2 =3-2r2.3 区域填充算法2.3.1基本知识1.区域填充定义:给出一个区域的边界,要求对边界范围内的所有象素单元赋予指定的颜色代码。 最常用的是多边形填色。 2.3 区域填充算法2.数学方法:扫描交点的奇偶数判断法1)将多边形画在平面上2)用一根水平扫描线从左到右通过多边形, 从而与多边形的边界相交,扫描线与边界相交奇数次后进入多边形,偶次数后走出多边形。ABC错判错判错判1.扫描线填色算法:按扫描线顺序计算扫描线与多边形的相交区间,再用要求的颜色或图案显示这些区间的象素,需提供多边

15、形各顶点的坐标填色算法2.种子填色算法:要求给出边界颜色 特征区域内的一个点的坐标。2.3.2 扫描线填色算法1.用水平扫描线由上往下扫描多边形2.每根扫描线与多边形各边产生一系列交点,采用递归算法3.将交点按x坐标进入分类,将分类后的交点成对取出,作为两个端点,以所需要填的色彩画水平直线。扫描线与边的求交点方法采用递归算法:以(x1,y1),(x2,y2)为端点的边与第i+1条扫描线的交点:yi+1=yi-1 ,xi+1=xi-(x2-x1)/(y2-y1)即 xi+1 = xi-1/m,yi(x2,y2)Pi(xi,yi)(x1,y1)Pi+1(xi+1,yi+1)yi+1左右顶点处理:(

16、以1、2、3次序画多边形外框)左顶点2:y1y2y2y3一个顶点同属于多边形两条边的端点,如果所交的顶点是左顶点或右顶点,填色因扫描交点的奇偶计数出错而出现错误。解决方法:删去左右顶点的入边的终点,(即1-2边)123123对于左顶点,(x1,y1),(x2,y2)改为 (x1,y1),(x2-1/m,y2-1)对于右顶点,(x1,y1),(x2,y2)改为 (x1,y1),(x2+1/m,y2+1)删去水平边123123水平边处理删去水平边2.3.3 种子填色算法已知多边形边界位置及颜色以及多边形内的一点(x,y)位置。 (x,y)方法:1.从(x,y)开始检测相邻位置以确定它们是否是边界颜

17、色,若不是,则用填充颜色涂色,并检测其相邻位置。 2.直至检测完所有象素。 常用的:四邻法和八邻法四邻法不能通过狭窄区域种子填色算法void seed_filling(x,y,fill_color,boundary_color)int x,y,fill_color,boundary_color;int c; c=inquire_color(x,y); if(cboundary_color)&(cfill_color) setpixel(x,y,fill_color); seed_filling(x,y+1,fill_color,boundary_color); seed_filling(x,y-1,fill_color,boundary_color); seed_filling(x-1,y,fill_color,boundary_color); seed_filling(x+1,y,fill_color,boundary_color); 种子填色算法种子填色算法(上,下,左,右)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号