计算机图形学 第3版 第2章 图形基元的显示.pptx

计算机图形学 第3版 第2章 图形基元的显示.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共85页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

2024/10/111计算机图形学

2024/10/112第二章图形基元的显示扫描转换将图形描述转换成用象素矩阵表示的过程图形基元(输出图形元素)图形系统能产生的最基本图形线段、圆、椭圆、多边形

2024/10/113第一节直线扫描转换算法第二节圆的扫描转换算法第三节椭圆扫描转换算法第四节区域填充

2024/10/114第一节直线扫描转换算法DDA直线扫描转换算法中点画线法Bresenham画线算法

2024/10/1151.DDA线段扫描转换算法设待画线段两端点的坐标值(x1,y1)和(x2,y2),假定x1x2 y=mx+b m=(y2-y1)/(x2-x1) b=(x2y1-x1y2)/(x2-x1)|m|≤1,对x每增1取允许的各整数值:

2024/10/116(0,0)(0,0)(0,2)(2,0)(5,7)(7,5)

2024/10/117voidDDALine(intx1,inty1,intx2,inty2){ doubledx,dy,e,x,y; dx=x2-x1; dy=y2-y1; e=(fabs(dx)fabs(dy))?fabs(dx):fabs(dy); dx/=e; dy/=e; x=x1; y=y1; for(inti=0;i=e;i++) { SetPixel((int)(x+0.5),(int)(y+0.5)); x+=dx; y+=dy; }}

2024/10/1182.中点画线法假定直线斜率在0、1之间,x=xi时已选(xi,yi)像素,确定x=xi+1与直线最近的像素P1(xi+1,yi)、P2(xi+1,yi+1)M表示P1与P2的中点,M=(xi+1,yi+0.5)。Q是直线与垂直线x=xi+1的交点若M在Q的下方,则P2离直线近,应取为下一个像素;否则应取P1

2024/10/119起点和终点分别为(x0,y0)和(x1,y1)。其所在直线F(x,y)=ax+by+c其中,a=y0-y1,b=x1-x0,c=x0y1-x1y0。直线上的点,F(x,y)=0;直线上方的点,F(x,y)0;直线下方的点,F(x,y)0。

2024/10/1110Q在M的上方还是下方,只要把M代入F(x,y),并判断它的符号。d=F(M)=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c当d0时,M在直线下方(即在Q的下方),应取右上方的P2。当d0时,则取正右方的P1。当d=0时,二者一样合适,取P1。d是xi,yi的线性函数,因此可采用增量计算,提高运算效率。

2024/10/1111对每一个像素计算判别式d,根据它的符号确定下一像素。若d≥0时,取正右方像素P1,判断再下一个像素应取哪个,应计算d1=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c=d+a故d的增量为a。

2024/10/1112若d0时,则取右上方像素P2。要判断再下一个像素,则要计算d2=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c=d+a+b故在第二种情况,d的增量为a+b

2024/10/1113再看d的初始值。显然,第一个像素应取左端点(x0,y0),相应的判别式值为d0=F(x0+1,y0+0.5)=a(x0+1)+b(y0+0.5)+c=ax0+by0+c+a+0.5b=F(x0,y0)+a+0.5b但由于(x0,y0)在直线上,故F(x0,y0)=0。因此,d的初始值为d0=a+0.5b为避免小数运算,考虑用2d来代替d的计算

2024/10/1114voidMidpointLine(intx0,inty0,intx1,inty1){ inta,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=2*a+b; delta1=2*a; delta2=2*(a+b); x=x0; y=y0; SetPixel(x,y); while(xx1) { if(d0){ x++; y++; d+=delta2; } else{ x++; d+=delt

您可能关注的文档

文档评论(0)

dllkxy + 关注
实名认证
内容提供者

本文库主要涉及建筑、教育等资料,有问题可以联系解决哦

版权声明书
用户编号:5213302032000001

1亿VIP精品文档

相关文档