计算机图形学-生成直线和圆弧.ppt

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

* 决策参数 * 中点圆算法的步骤 输入圆的半径和圆心,并得到圆周上(圆心在原点)的第一个点 计算决策参数的初始值 判断pk的符号,决定下一个像素位置以及下一个决策参数pk+1 确定在其他七个八分圆中的对称点 将每个计算出的像素位置移动到恰当位置 重复步骤3到步骤5,直到x=y * 椭圆生成算法 * 帧缓存值的装载 实现线段和其他对象显示函数的最后一步工作是设定帧缓存的颜色值。 由于扫描转换算法以连续的单位间隔生成像素位置,因此扫描转换算法可使用增量方法在每一步高效地存取帧缓存 * 帧缓存内的像素屏幕位置 * * 第2章 生成直线和圆弧的算法 坐标系统 画线算法 帧缓存值的装载 圆生成算法 * 坐标系统 视频显示器上的位置使用与帧缓存中的像素位置相对应的整数屏幕坐标进行描述。 * 画线算法 在光栅系统中,通过像素绘制直线,水平垂直方向的步长受到像素的间距的限制 在离散位置上对直线取样,并且在每个取样位置上确定直线最近的像素 * DDA算法(数值微分法) 直线方程表示如下: 确定线段的端点后,可以计算出斜率m和截距b的值: 对于任何沿直线给定的x增量Δx可以计算出y方向的增量: * DDA算法(数值微分法) 当斜率为正,且小于等于1,则以单位x间隔取样,逐个 计算y值为: 当斜率大于1时,交换x、y的位置: * DDA算法(数值微分法) 输入线段两个端点的像素位置,端点位置间的水平和垂直差值赋给参数dx和dy 绝对值大的参数确定参数steps的值 从像素位置(x0,y0)开始,确定沿线段生成下一个像素位置的每一步所需的偏移量,并循环steps次。 * DDA算法(数值微分法) 例:画直线段p(0,0)--P1(5,2) x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 5 2 2.0+0.5 注:网格点表示像素 * DDA算法(数值微分法) DDA算法计算像素要比直接使用直线方程计算的速度快。它利用了光栅特性消除了直线方程中的乘法,而在x或y方向使用合适的增量,从而沿路径逐步得到各像素的位置 但是在连续迭代过程中,会产生误差的累积,并且取整操作和浮点运算仍然非常耗时 * DDA算法实现 #includestdlib.h #includemath.h inline int round (const float a) {return int (a+0.5)} void lineDDA (int x0, int y0, int xEnd, int yEnd) { int dx = xEnd – x0, dy = yEnd – y0, steps, k; float xIncrement, yIncrement, x = x0, y = y0; * DDA算法实现 if (fabs (dx) fabs (dy)) steps = fabs (dx); else steps = fabs (dy); xIncrement = float (dx) / float (steps); yIncrement = float (dy) / float (steps); setpixel (round (x) , round (y)); * DDA算法实现 for (k = 0; k steps; k++){ x += xIncrement; y += yIncrement; setPixel ( round (x), round (y)); } } * Bresenham画线算法 需要确定下一步是点(11,10)还是(11,11) * Bresenham画线算法 首先考虑斜率小于1的直线的扫描转换过程,沿线路径的像素位置由以单位x间隔的取样来确定。 从(x0,y0)开始,逐步处理 假设已经决定要显示在(xk,yk)那么下一步需要确定在(xk+1,yk)还是在位置(xk+1,yk+1) * Bresenham画线算法 * Bresenham画线算法|m|1 输入线段的两个端点,将左端点存储在(x0,y0)中 将(x0,y0)装入帧缓存,画出第一个点 计算常量Δx、Δy、2Δy和2Δy-2Δx,并得到决策参数的第一个值: p0=2Δy-Δx 从k=0开始,在沿路径的每个xk处,进行下列检测: 如果pk0,下一个要绘制的点是(xk+1,yk),且 pk+1=pk+2Δy 如果pk0,下一个要绘制的点是(xk+1,yk+1),且 pk+1=pk+2Δy-2Δx 重复

文档评论(0)

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

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

1亿VIP精品文档

相关文档