计算机图形学基础 基本图形生成算法5-1_第1页
计算机图形学基础 基本图形生成算法5-1_第2页
计算机图形学基础 基本图形生成算法5-1_第3页
计算机图形学基础 基本图形生成算法5-1_第4页
计算机图形学基础 基本图形生成算法5-1_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学基础第五章 基本图形生成算法提出问题:如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点、直线、圆、椭圆、多边形域、字符串及其相关属性等) 图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形。 图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。 第五章 基本图形生成算法圆、椭圆5.1 直线的扫描转换直线的绘制要求:1.直线要直2.直线的端点要准确,即无定向性和断裂情况3.直线的亮度、色泽要均匀4.画线的速度要快5.要求直线具有不同的色泽、亮度、线型等解决的问题:给定直线两端点P0(x0,y0)和P1(x1,y1),画出该直线。5.1.

2、1 数值微分法(DDA法)直线的微分方程:5.1 直线的扫描转换DDA算法原理: =1/max(|x|,|y|) max(|x|,|y|)=|x|,即|k|1的情况:max(|x|,|y|)=|y|,此时|k|1:注意:round(x)=(int)(x+0.5)Void DDAline(int x0,int y0,int x1,int y1) int dx,dy,eps1,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; If (abs(dx)abs(dy) eps1=abs(dx); else eps1=abs(dy);

3、xIncre=(float)dy/(float)eps1; yIncre=(float)dy/(float)eps1; for (k=0;k0;对于直线下方的点,F(x,y)0。5.1 直线的扫描转换基本原理:假定0k1,x是最大位移方向判别式:则有:误差项的递推d0:误差项的递推d0:初始值d的计算0k1时Bresenham算法的算法步骤为:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、d=0.5-k、x=x0、y=y0;3.绘制点(x,y)。判断d的符号;若d0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y)

4、,d更新为d-k。4.当直线没有画完时,重复步骤3。否则结束。5.1.2 中点Bresenham算法5.1 直线的扫描转换改进:用2dx代替d1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、d=x-2y、x=x0、y=y0。3.绘制点(x,y)。判断d的符号。若d0.5,则(x,y)更新为(x+1,y+1),同时将d更新为d-1;否则(x,y)更新为(x+1,y)。5.当直线没有画完时,重复步骤3和4。否则结束。5.1.3 改进的Bresenham算法5.1 直线的扫描转换改进1:令e=d-0.5e初=-0.5,每走一步有e=e+k。if (e0) then

5、e=e-15.1.3 改进的Bresenham算法5.1 直线的扫描转换算法步骤为:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、e=-0.5、x=x0、y=y0。3.绘制点(x,y)。4.e更新为e+k,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-1;否则(x,y)更新为(x+1,y)。5.当直线没有画完时,重复步骤3和4。否则结束。5.1.3 改进的Bresenham算法5.1 直线的扫描转换改进2:用2ex来替换ee初=-x,每走一步有e=e+2y。if (e0) then e=e-2x5.1.3 改进的Bresenh

6、am算法5.1 直线的扫描转换算法步骤:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、e=-x、x=x0、y=y0。3.绘制点(x,y)。4.e更新为e+2y,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2x;否则(x,y)更新为(x+1,y)。5.当直线没有画完时,重复步骤3和4。否则结束。5.1.3 改进的Bresenham算法5.1 直线的扫描转换5.2 圆的扫描转换解决的问题:绘出圆心在原点,半径为整数R的圆x2+y2=R2(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)5.2.

7、1 八分法画圆解决问题:5.2.2 简单方程产生圆弧算法原理:利用其函数方程,直接离散计算 圆的函数方程为: 圆的极坐标方程为: 5.2.3 中点Bresenham画圆构造函数F(x,y)=x2+y2-R2。对于圆上的点,有F(x,y)=0;对于圆外的点,F(x,y)0;而对于圆内的点,F(x,y)0时,下一点取Pd(xi +1,yi-1)。M的坐标为:M(xi +1,yi-0.5)当F(xM,yM)0时,取Pd(xi +1,yi-1)当F(xM,yM)=0时,约定取Pu。构造判别式:误差项的递推第一种情况:d0: 误差项的递推第二种情况: d0: 判别式的初始值初始点(0,R)候选点(1,R

8、-1)(1,R)中 点 (1,R-0.5)算法步骤:1.输入圆的半径R。2.计算初始值d=1.25-R、x=0、y=R。3.绘制点(x,y)及其在八分圆中的另外七个对称点。4.判断d的符号。若d0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。5.当xy时,重复步骤3和4。否则结束。改进:用d-0.25代替d算法步骤:1.输入圆的半径R。2.计算初始值d=1-R、x=0、y=R。3.绘制点(x,y)及其在八分圆中的另外七个对称点。4.判断d的符号。若d0,则先将d更新为d+2x+3,再将(x,y)更

9、新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。5.当x0;对于椭圆内的点,F(x,y) x分量y分量 0,取Pd(xi+1,yi-1)误差项的递推 情况一:d10:误差项的递推 情况二: d10: 上半部判别式的初始值: 初始点(0,b)候选点(1,b-1)(1,b)中 点 (1,b-0.5)再来推导椭圆弧下半部分的绘制公式判别式 误差项的递推 判别式的初值判别式 若d20,取Pl(xi,yi-1)若d20,取Pr(xi+1,yi-1)误差项的递推第一种情况:d20:误差项的递推第二种情况: d20: 下半部判别式的初始值:用上半部分计算的最后点(x,y)来计算下半部分中d的初值候选点(x,y-1)(x-1,y-1)注意:上半部分的终止判别下半部分误差项的初值算法步骤:1.输入椭圆的长半轴a和短半轴b。2.计算初始值d=b2+a2(-b+0.25)、x=0、y=b。3.绘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论