计算机图形学第二章a课件

PPT
  • 阅读 62 次
  • 下载 0 次
  • 页数 66 页
  • 大小 789.500 KB
  • 2022-11-13 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
计算机图形学第二章a课件
可在后台配置第一页与第二页中间广告代码
计算机图形学第二章a课件
可在后台配置第二页与第三页中间广告代码
计算机图形学第二章a课件
可在后台配置第三页与第四页中间广告代码
计算机图形学第二章a课件
计算机图形学第二章a课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 66
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】计算机图形学第二章a课件.ppt,共(66)页,789.500 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-5418.html

以下为本文档部分文字说明:

二.绘图函数1.点voidputpixel(intx,inty,intcolor);color符号名,取值为0—15voidmoveto(intdeltax,intdeltay);例题:当前坐标CPpu

tpixel(100,200,5);(100,200)moveto(50,30);(50,30)moverel(10,20);(60,50)第1页,共66页。intgetx(void);intgety(void);2.直线voidline(

intx0,inty0,intx1,inty1);当前坐标(x,y)voidlineto(intx,inty);voidlinerel(intdeltax,intdeltay);当前坐标(x+deltax,y+deltay)例题:arc(40,40,0,120,30);第2页,共66页。3.矩形

voidrectangle(intleft,inttop,intright,intbottom);左上角坐标(left,top);右下角坐标(right,bottom);第3页,共66页。5.多边形voiddrawpo

ly(intnumpoints,int*polypoints);•numpoints:为多边形的顶点数•polypoints:各顶点坐标的整数序列•共有2*numpoints个整数,若第一个点和最后一个点坐标相同,则画出封闭多边形,否

则为多边形折线第4页,共66页。多边形例题intp[2*6]={45,50,75,30,85,75,180,65,70,5,45,50};drawpoly(6,p);(45,50)第5页,共66页。三.颜色控制1.voidsetbkcolor(intcolor);默认色为黑色2.void

setcolor(intcolor);设置当前画线颜色,默认色为白色(15)3.intgetbkcolor(void);返回当前背景色4.intgetcolor(void);返回当前绘图颜色5.intgetpixel(intx

,inty);第6页,共66页。4.圆,圆弧和椭圆voidcircle(intx,inty,intradius);voidarc(intx,inty,intstangle,intendangle,intradius);起始

角stangle,终止角endangle0。--360。voidellipse(intx,inty,intstangle,intendangle,intxradius,intyradius);从起始角

stangle开始画椭圆弧至终止角endangle,xradius,yradius分别为方向x,y的半径第7页,共66页。0BLACK1BLUE2GREEN3CYAN4RED5MAGENTA6BROWN7LIGHTGRAY第8页,共66页。8DRAKGRAY9LIGHTBLUE10LIGHTGR

EEN11LIGHTCYAN12LIGHTRED13LIGHTMAGENTA14YELLOW15WHITE第9页,共66页。6.voidsetlinestyle(intlinestyle,unsignedupattern,intthickness);第10页,共66

页。Linestyle取值:SOLID-LINE0实线DOTTED-LINE1点线CENTER-LINE2中心线DASHED-LINE3虚线USERBIT-LINE4用户定义的线upattern仅在userbit-line时起作用第11页,共66页。•thickness线宽NOR

M-WIDTH1一个象素宽THICK-WIDTH3三个象素宽第12页,共66页。例题:setlinestyle(DASHED-LINE,0,THICK-WIDTH);或setlinestyle(3,0,3);line(300,

50,300,200);第13页,共66页。上机作业2:画出如下图形第14页,共66页。第二章基本图形的生成和计算如何在指定的输出设备上描述构造基本二维几何图形(点、直线、圆、椭圆、多边形、字符串及其相关属性等)第15页,

共66页。2.1直线的生成算法图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。图5-1用一系列的象素点来逼近直线用一系列的象素点来逼近直线第16页,共66页。2.1直线的生成算法2.1.1直线DDA算法(DigitalDifferentialAn

alyser)设直线起点(x1,y1),终点(x2,y2)xy(x1,y1)(x2,y2)第17页,共66页。则斜率mm=(y2-y1)/(x2-x1)=dy/dxxy(x1,y1)(x2,y2)dydx第18页,共66页。xy(x1,y1)(x2,y2)dyd

xdy/dx=Dy/Dxxi+1=xi+Dxyi+1=yi+DyDy=m*Dx(xi,yi)(xi+1,yi+1)DxDy第19页,共66页。xy1b1a4a4b3b3a2a2bxi+1=xi+1yi+1=y

i+mxi+1=xi-1yi+1=yi-m(x1,y1)(x2,y2)Oxi+1=xi+1/myi+1=yi+1第20页,共66页。象限DxDy象限DxDy1a1m4a1-m1b1/m14b1/m-12a-1m2b-1/m13a-1-m3b-1/m-1结论:1.当|m|<1时,|Dx|

=1,|Dy|=m否则|Dx|=1/m,|Dy|=1第21页,共66页。结论:2.Dx,Dy的符号与dx,dy的符号相同。第22页,共66页。缺点:1.浮点增量的连续迭加,误差积累使长线段计算的象素位置偏离实际线段2.浮点运算十分耗

时第23页,共66页。1965年由Bresenham提出设直线起点(x1,y1),终点(x2,y2)y=mx+bb=y1-m*x1m=(y2-y1)/(x2-x1)=dy/dx2.1.2直线Bresenham算法第24页,共66页。1312111

010111213(11,11)(12,11)或(12,12)当直线方向限于1a象限(x1,y1)(x2,y2)第25页,共66页。当直线方向限于1a象限,则xi+1=xi+1yi+1<yi+1<yi第2

6页,共66页。1312111010111213(xi,yi)(x1,y1)(x2,y2)(xi+1,yi)(xi+1,yi+1)d1=y-yid2=yi+1-y第27页,共66页。Bresenham算法采取对整型参量的符号进行检测,整型参

量的值正比于两象素与实际线段之间的偏移yi+1的选择由d1,d2的大小决定第28页,共66页。(xi,yi)(xi+1,yi)(xi+1,yi+1)d1=y-yid2=yi+1-y如d1>d2,则yi+1=yi+1,否则yi+1=yid1=y-

yid2=yi+1-y第29页,共66页。d1-d2=2y-2yi-1y=m(xi+1)+bm=dy/dxd1=y-yid2=yi+1-y∴d1-d2=2dy/dx(xi+1)+2b-2yi-1两边*dx,令Pi=(d1-d2)dx则P

i=2dy(xi+1)+2b*dx-2yi*dx-dx=2xidy-2yidx+2dy+(2b-1)dx第30页,共66页。由于dx>0,则Pi可用来判断符号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)dx第31页,共66页。P1=2x1dy-2y1dx+2dy+(2b-1)dx=2x1dy-

2y1dx+2dy+[2(y1-(dy/dx)x1)-1]dx=2x1dy-2y1dx+2dy+2y1dx-2x1dy-dx=2dy-dxPi=2xidy-2yidx+2dy+(2b-1)dxb=y1-m*x1第32页,共66页。1.画点(x

1,y1)dx=x2-x1dy=y2-y1P1=2dy-dxi=12.xi+1=xi+1当Pi>0,则yi+1=yi+1,否则yi+1=yi3.画点(xi+1,yi+1)画线步骤:P1=2dy-dx第33页,共66页。4.求Pi+1,当Pi>0则Pi+1=Pi+2dy-2dx否则P

i+1=Pi+2dy5.i=i+1如i<dx+1则转2否则结束第34页,共66页。优点1.不做除法2.只用整数3.只有整数加减和乘2运算第35页,共66页。例:起点(20,10)终点(30,18)斜率0.8dx=

10,dy=8P1=2dy-dx=2*8-10=6iPi(xi+1,yi+1)123第36页,共66页。iPi(xi+1,yi+1)45678910第37页,共66页。例:起点(20,10)终点(30,18)斜率0.8dx=10,dy=8P1=2dy-dx=2*8-10=6iPi(xi+1,y

i+1)16(21,11)22(22,12)3-2(23,12)第38页,共66页。iPi(xi+1,yi+1)414(24,13)510(25,14)66(26,15)72(27,16)8-2(28,16)914(2

9,17)1010(30,18)第39页,共66页。Bresenham画法对任意斜率的线段具有通用性。当m>0,且m>1,则交换x,y之间规则第40页,共66页。2.2圆的生成算法2.2.1基础知识设圆心坐标(xc,yc),半径r1.直角坐标法(x-xc)2+(y-yc)2=r2∴y=yc±

(r2-(x-xc)2)1/2x-xc从-r~r作加1递增,可求出y坐标但圆周上的点不均匀即象素位置间的间距不一致。第41页,共66页。12第42页,共66页。2.2圆的生成算法2.极坐标法x=xc+rcosθy=yc+rsinθrθθ∈[0

,∏/4],利用对称法则第43页,共66页。(x,y)yy=-xy=x(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)第44页,共66页。2.2圆的生成算法2.2.2圆的Bresenham算法Bresenham圆算法通过比较象素与圆的距离的平方而

避免了平方根运算。设圆心坐标(0,0)半径为r起点(0,r)顺时针方向1/8圆周xi+1=xi+1yi+1=yi或yi+1=yi-1第45页,共66页。xyxixi+1yiyyi-1d21/2d11/2第46

页,共66页。2.2圆的生成算法y2=r2-(xi+1)2d1=yi2-y2=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-2r2Pi+1=Pi+4xi+6+2(yi+12+1-yi2)-2(yi+12+1-yi2)当P<0,则yi+1=yi,否则yi+1=yi-1第47页,共66页。2.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+12-yi2)-2(yi+1-yi)当P1(x1=0,y1=r)P1=2+r2+(r-1)2-2r2=

3-2r第48页,共66页。2.3区域填充算法2.3.1基本知识1.区域填充定义:给出一个区域的边界,要求对边界范围内的所有象素单元赋予指定的颜色代码。最常用的是多边形填色。第49页,共66页。2.3区域填

充算法2.数学方法:扫描交点的奇偶数判断法1)将多边形画在平面上2)用一根水平扫描线从左到右通过多边形,从而与多边形的边界相交,扫描线与边界相交奇数次后进入多边形,偶次数后走出多边形。第50页,共66页。第51页,共66页。ABC错判错判错判第52页,共66页。1.扫描线填色算法:按扫描线顺序计

算扫描线与多边形的相交区间,再用要求的颜色或图案显示这些区间的象素,需提供多边形各顶点的坐标填色算法2.种子填色算法:要求给出边界颜色特征区域内的一个点的坐标。第53页,共66页。2.3.2扫描线填色算法1.用水平扫描线由上往下扫描多边形2.每根扫描线

与多边形各边产生一系列交点,采用递归算法3.将交点按x坐标进入分类,将分类后的交点成对取出,作为两个端点,以所需要填的色彩画水平直线。第54页,共66页。扫描线与边的求交点方法采用递归算法:以(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第55页,共66页。左右顶点处理:(以1、2、3次序画多边形外框)左顶点2:y1<y2<y3123123右顶点2:y

1>y2>y3第56页,共66页。一个顶点同属于多边形两条边的端点,如果所交的顶点是左顶点或右顶点,填色因扫描交点的奇偶计数出错而出现错误。解决方法:删去左右顶点的入边的终点,(即1-2边)123123第57页,共66页。对于左

顶点,(x1,y1),(x2,y2)改为(x1,y1),(x2-1/m,y2-1)对于右顶点,(x1,y1),(x2,y2)改为(x1,y1),(x2+1/m,y2+1)删去水平边123123第58页,共66页。水平边处理•删去水平边第5

9页,共66页。2.3.3种子填色算法已知多边形边界位置及颜色以及多边形内的一点(x,y)位置。(x,y)第60页,共66页。方法:1.从(x,y)开始检测相邻位置以确定它们是否是边界颜色,若不是,则用填充颜色涂色,并检测其相邻位置。2.直至检测完所有象素。第61页,

共66页。常用的:四邻法和八邻法第62页,共66页。四邻法不能通过狭窄区域第63页,共66页。种子填色算法voidseed_filling(x,y,fill_color,boundary_color)intx,y,fill_c

olor,boundary_color;{intc;c=inquire_color(x,y);if((c<>boundary_color)&&(c<>fill_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_fill

ing(x+1,y,fill_color,boundary_color);}}第64页,共66页。种子填色算法第65页,共66页。种子填色算法(上,下,左,右)第66页,共66页。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?