- 1、本文档共96页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学基础 第2章 基本图形生成 本章主要内容 直线的生成 圆的生成 椭圆的生成 多边形扫描转换与区域填充 字符的生成 概述 在计算机产生的图形中,用到大量的直线,画好直线是非常有意义的。 绘制直线的要求 线条应该显得笔直:由连续点组成的直线要显示在离散网格的平面上,一定会有不经过网格的点,如左下图。在这种情况下,必须选择靠近直线的网格点来逼近这条直线。若选择的好,线就显得较直;否则就会较弯曲,如下图。 绘制直线的要求 直线端点位置应该准确:画出的线段如果不准确,往往会使两条线之间不能很好的镶接,如左图。 直线浓度应该均匀:线段的浓度与单位线段中所显示的点数成正比。要保持线段的浓度均匀端点应该等距分布。要取得均匀的线段浓度,应该保持每单位长度的点数是个常数。 显示线段的速度应快:生成直线可用软件和硬件来实现,一般情况下,硬件要比软件实现得快。 2.1 直线的生成算法 直线的扫描转换: 确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。 三个常用算法: 数值微分法(DDA) 中点画线法 Bresenham算法。 1. 数值微分法(DDA) 假定直线的起点、终点分别为:(x0,y0), (x1,y1),且都为整数。 已知过端点P0 (x0, y0), P1(x1, y1)的直线段L:y=kx+b,直线斜率为: 计算yi+1= kxi+1+b = kxi+b+k?x = yi+k?x 当?x =1; yi+1 = yi+k 即:当x每递增1,y递增k(即直线斜率); 注意上述分析的算法仅适用于?k? ≤1的情形。在这种情况下,x每增加1,y最多增加1。 当 ?k? ?1时,y每增加1,x增加1/k。 增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。 DDA算法就是一个增量算法。 这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。 算法实现 void CMyView::OnDdaline() { CDC *pDC=GetDC(); // 获得设备指针 int x0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0); // 定义直线两端点和直线颜色(红色) float x,y,i; float dx,dy,k; dx=(float)(x1-x0); dy=(float)(y1-y0); k=dy/dx; y=y0; x=x0; if(abs(k)1) { for(;x=x1;x++) {pDC-SetPixel(x,int(y+0.5),c); y=y+k;} } if(abs(k)=1) { for(;y=y1;y++) {pDC-SetPixel(int(x+0.5),y,c); x=x+1/k;} } ReleaseDC(pDC); //释放设备指针 } 算法特点: 例:画直线段P0(0,0)--P1(5,2) 2.1.2中点画线法 原理: 当M在Q的下方- P2离直线更近-取P2 M在Q的上方- P1离直线更近更近-取P1 M与Q重合, P1、P2任取一点。 假设直线方程为:F(x,y)=ax+by+c=0 其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 由常识知: ∴欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。 构造判别式:d=F(M)=F(xp+1,yp+0.5) =a(xp+1)+b(yp+0.5)+c 当d0,M在直线(Q点)下方,取右上方P2; 当d0,M在直线(Q点)上方,取右方P1; 当d=0,选P1或P2均可,约定取P1; 能否采用增量算法呢? 若d?0-M在直线上方-取P1; 此时再下一个象素的判别式为 d1=F(xp+2,yp+0.5) =a(xp+2)+b(yp+0.5)+c = a(xp +1)+b(yp +0.5)+c +a =d+a; 增量为a 若d0-M在直线下方-取P2; 此时再下一个象素的判别式为 d2= F(xp+2, yp+1.5) =a(xp+2)+b(yp+1.5)+c = a(xp +1)+b(yp +0.5)+c +a +b =d+a+b ; 增量为a+b 画线从(x0, y0)开始,d的初值 d0 =F(x0+1,
您可能关注的文档
- 笔记本维修资料.ppt
- 编辑Ghost系统安装光盘启动菜单.ppt
- 变频器故障判断和维修.ppt
- 彩钢压瓦机 彩钢压瓦机厂家 彩钢压瓦机参数.ppt
- 操作系统安全之端口与服务1.ppt
- 操作系统第3讲.ppt
- 测控设备类应用.ppt
- 测试路由.ppt
- 策城桑拿系统—理论培训.ppt
- 产品认知.ppt
- 2.1神经调节的结构基础 课件 人教版高中生物学选择性必修1.pptx
- 2.2.1算术平方根 课件 北师大版数学八年级上册.pptx
- 2.3.1细胞通过分裂而增殖 课件(内嵌视频3个)初中生物学北师大版(2024)七年级上册.pptx
- 2.3.2细胞分化形成组织 课件 初中生物学北师大版(2024)七年级上册.pptx
- 4.3.1 角与角的大小比较 课件 2025-2026学年湘教版数学七年级上册.pptx
- 2.3.3生物体的器官、系统 课件 初中生物学北师大版(2024)七年级上册.pptx
- 聚异氰酸酯行业商业计划书.docx
- 2.4节神经系统的分级调节 课件 人教版高中生物学选择性必修1.pptx
- 【公开课】探索勾股定理第1课时(课件)数学北师大版2024八年级上册.pptx
- 综合实践 一天的时间(课件)2025-2026学年度苏教版数学三年级上册.pptx
文档评论(0)