计算机图形学直线生成素材.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.1 光栅图形中点的表示 直线的生成算法 数值微分(DDA)法 三、 直线DDA算法的思考 四、 直线DDA算法的实现    实验报告二        --DDA算法 DDA算法描述 DDA算法的复杂度描述 DDA算法实例1: (A1(100,200)和A2(500,400))的源代码 DDA算法实例2: (A1(100,400)和A2(500,200))的源代码 Bresenham算法 一、基本思想 比较从理想直线到位于直线上方的像素的距离d1和相邻的位于直线下方的像素的距离d2,根据距离误差项的符号确定与理想直线最近的象素。 思考问题 决策变量di与0之间的大小关系 如何确定下一个像素点的决策变量di+1 是否可以找出di与di+1的关系式 如何确定第一个决策变量di 决策变量di的作用 决定当前像素点的纵坐标(横坐标)是加1还是不变 决定下一个像素点的决策变量di+1的表达式   实验报告三       -- Bresenham算法 Bresenham算法描述 Bresenham算法的复杂度描述 Bresenham算法实例1: (A1(0,0)和A2(400,50))的源代码 Bresenham算法实例2: (A1(0,200)和A2(500,0))的源代码 实验报告四(选做) 在生成直线的算法中,我们先后学习了普通直线生成算法、数值微分法(DDA)算法和 Bresenham算法。写写学习心得和学习所得。 注:如果你在课堂或课后学习了以上提到的三种算法(尤其是后两种算法),无论学习效果如何或是自己对三种算法理解程度是深是浅,希望选做实验报告四,为本门课程做一个相对圆满的总结。 * * 显示器是由离散像素组成的矩阵,在绘制具有连续性质的直线、曲线或区域等基本图形时,需要确定最佳逼近它们的像素,这个过程称为光栅化。 虽然几乎所有的程序设计语言都提供了线、圆弧、填充等的绘制函数,但只有学习了基本图形的生成原理和算法,才能超越具体程序设计语言的限制,满足用户的特殊绘图要求。 假定,编程语言提供了一个显示像素函数: SetPixel(x,y,color); 其中,x和y为像素的位置坐标,color为像素的颜色。 第2章 基本光栅图形生成技术 … (x,y)坐标 地址线性表 1D表示 显示屏幕 2D表示 像素由其左下角坐标表示 2.2直线的扫描转换 ?一、数学直线   在数学上,理想的直线是一条没有宽度的、由无数个无限小的连续的点构成的集合。 数学直线 二、光栅平面显示的直线   在光栅显示平面上,只能用二维光栅格网上尽可能靠近这条直线的象素点的集合来表示它。每个象素的坐标x和y只能是整数,也就是说相邻象素的坐标值是阶跃的而不是连续的。 光栅直线 三、直线的扫描转换   直线的扫描转换,就是要找出显示平面上最佳逼近理想直线的那些象素的坐标值,并将这些象素置成所要求的颜色。 直线的扫描转换 由于一幅图中可能包含成千上万条直线,所以要求绘制算法应该:   1、最接近数学上的直线;   2、画线速度尽可能的快; 3、沿着线段分布的象素应均匀。 2.3 线的生成算法   不均匀的例子如右图,对同样长的线段进行图中的扫描转换,会因为斜率不同,产生的象素个数不相等,这样将导致象素亮度分布不均匀。 缺点:每步都需要一个浮点乘法运算和一个取整运算,所以效率太低。 斜率截距直线方程: k表示斜率,b是y轴截距。 给定两个端点P0(x0,y0)和P1(x1,y1),线段的斜率k和截距b为: 从起点到终点,x每次增加(或减少)1,用直线方程计算对应的y值,再用SetPixel(x, int(y),color)输出该像素。 ? 复杂度: 乘法+加法+取整 数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微分方程来生成直线的方法。 一、直线DDA算法描述: 设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得直线的斜率k: (2-1) = k =直线的斜率 ?????????????????????????????????????????????????? 1. 可通过计算由x方向的增量△x引起y的改变来生成直线: (2-3) yi+1=yi+△y=yi+△x·k (2-2) xi+1=xi+△x 2. 也可通过计算由y方向的增量△y引起x的改变来生成直线: (2-5) xi+1=xi+△x=xi+△y/k (2-4) yi+1=yi+△y 式(2-2)至(2-5)是递推的。 二、直线DDA算法思想: 选定|x2

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档