计算机图形学实验一直线生成算法报告_第1页
计算机图形学实验一直线生成算法报告_第2页
计算机图形学实验一直线生成算法报告_第3页
计算机图形学实验一直线生成算法报告_第4页
计算机图形学实验一直线生成算法报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一直线生成算法1、 实验目的及要求:1学习c语言的基本绘图方法;2. 实习直线基本生成算法;3了解光栅图形显示器的工作原理和特点;4掌握课本所介绍的图形算法的原理和实现。 5. 基于光栅图形显示器,在c环境中使用基本图形生成算法画根粗细不同的直线。1.)写出完整的dda画线算法程序,使其可以画任意直线;2.)写出完整的中点画线算法程序,使其可以画任意直线;3)写出完整的breaenham画线程序,使其可以画任意直线;二、理论基础:1、dda算法:实现的关键是如何步进和步进的方向:步进的正或负,决定能否正确的到达终点。步进的大小:它控制了变化最大的步进,令其为单位步进,而另一个方向的步进必小

2、于1 ,这样不论斜率|m|1否,都会使直线的亮度均匀。 依公式: 则下一点坐标为: 2、 中点画法:假设x坐标为xp的各像素点中,与直线最近者已确定,为(xp,yp)。那么,下一个与直线最近的像素只能是正右方的p1(xp+1,yp)或右上方的p2(xp+1,yp+1)两者之一。再以m表示p1与p2的中点,即m=(xp+1,yp+0.5)。又设q是理想直线与垂直线x=xp+1的交点。若m在q的下方,则p2离直线近,应取为下一个像素;否则应取p1。3、 bresenham算法:假设我们需要由 (x0, y0) 这一点,绘画一直线至右下角的另一点(x1, y1),x,y分别代表其水平及垂直座标。在此

3、我们使用电脑系统常用的座标系,即x座标值沿x轴向右增长,y座标值沿y轴向下增长。因此x及y之值分别向右及向下增加,而两点之水平距离为x1 x0且垂直距离为y1-y0。由此得之,该线的斜率必定介乎于1至0之间。而此算法之目的,就是找出在x0与x1之间,第x行相对应的第y列,从而得出一像素点,使得该像素点的位置最接近原本的线。3、 算法设计与分析:1、dda算法:(1)已知过端点p0 (x0, y0), p1(x1, y1)的直线段l :y=kx+b(2)直线斜率为 :k=(y1-y0)/(x1-x0)(3)xi+1=xi+*x yi+1=yi+*y 其中, =1/max(|x|,|y|) max

4、(|x|,|y|)= |x| (|k|<=1) |y| (|k|>1) (4)|k|<=1时:xi+1=xi+(或-)1 yi+1=yi+(或-)k |k|>1时:xi+1=xi+(或-)1/k yi+1=yi+(或-)1这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。 2、 中点画法:(1) 输入直线的起点坐标p0(x0,y0)和终点坐标p1(x1,y1).(2) 定义直线当前点坐标x和y,定义中点偏差判别式d、直线斜率k、像素点颜色rgb(3) x= x0,y= y0计算d=0.5-k,k=( y1-y0)/(x1-x0), rgb=rgb=(0

5、,0,255).(4) 绘制点(x,y),判断d的符号,若d<0,则(x, y)更新为(x+1,y+1),d更新为d+1-k,否则(x, y)更新为(x+1,y),d更新为d-k. 如果当前点x小于(x1,重复步骤(4),否则结束。3、bresenham算法: (1)假定直线段的0<=k<=1(k=y/x) ,p0(x0,y0)和p1(x1,y1) (2)基本原理: d:直线与垂直网格线的交点到网格线的距离。 所以有 xi+1=xi+1 yi+1= yi+1(d>0.5) yi (d<=0.5)4、 程序调试及结果的分析: 1、dda源程序:int x0=sp0,

6、x1=ep0,y0=sp1,y1=ep1;double x, dx,dy,k,y;if(x0=x1)if(y0>=y1)for(y=y0;y<=y1;y+) pdc->setpixel(x,y,color) ; y+;elsefor(y=y0;y<=y1;y-) pdc->setpixel(x,y,color) ; y-;dx=x1-x0;dy=y1-y0;k=dy/dx;if(fabs(k)<=1)if(x0<x1)y=y0;for(x=x0;x<=x1;x+) pdc->setpixel(x,y,color) ; y=y+k;if(x0

7、>x1)y=y0;for(x=x0;x>=x1;x-) pdc->setpixel(x,y,color) ;y=y-k;elseif(y0<y1)x=x0;for(y=y0;y<=y1;y+)pdc->setpixel(x,y,color) ;x=x+1/k;elsex=x0;for(y=y0;y>=y1;y-) pdc->setpixel(x,y,color) ;x=x-1/k;2、 中点画法源程序:float a,b,delta1,delta2,d,x,y;int x0,y0,x1,y1;if (sp0<ep0)x0=sp0;y0=sp

8、1;x1=ep0;y1=ep1;else x1=sp0;y1=sp1;x0=ep0;y0=ep1;float k;a=y0-y1;b=x1-x0;k=-a/b;x=x0;y=y0;pdc->setpixel(x,y,color);if(b=0)if(y0 < y1)for(y=y0;y <= y1;y+)pdc->setpixel(x0,y,color);elsefor(y=y0;y >=y1;y-)pdc->setpixel(x0,y,color);/if( 0<=k &&k<= 1)d=2*a+b; delta1=2*a; d

9、elta2=2*a+2*b;while(x <x1)if(d < 0)x+;y+;d+=delta2;elsex+;d+=delta1;pdc->setpixel(x,y,color);if (k >=-1 && k <=0)d=2*a-b;delta1=2*(a-b);delta2=2*a;while(x <x1)if(d<=0)x+;d+=delta2;elsex+;y-;d+=delta1;pdc->setpixel(x,y,color);if(k >1)d=2*b+a;delta1=2*b;delta2=2*(a+b

10、);while (y < y1)if (d<=0)y+;d+=delta1;elsex+;y+;d+=delta2;pdc->setpixel(x,y,color);if(k <-1)d=a-2*b;delta1=-2*b;delta2=2*(a-b);while (y >y1)if(d >0)y-;d+=delta1;elsex+;y-;d+=delta2;pdc->setpixel(x,y,color);3、 bresenham源程序:int x, y, dx, dy, zjx, zjy, e, temp, tag, i;int x0, x1, y

11、0, y1;x0 = sp0;x1 = ep0;y0 = sp1;y1 = ep1;x = x0;y = y0;dx = abs(x1 - x0);dy = abs(y1 - y0);/ 判断x递增还是递减if (x1 > x0)zjx = 1;elsezjx = -1;/ 判断y递增还是递减if (y1 > y0)zjy = 1;elsezjy = -1;if(dy > dx)temp = dx;dx = dy;dy = temp;tag = 1; elsetag = 0;e = 2 * dy - dx;for(i=1; i<=dx; i+)pdc -> setpixel(x, y, color);if(e >= 0)if(tag = 0)y = y + zjy;elsex = x + zjx;e = e - 2 * dx;if (tag = 0)x = x + zjx;elsey

温馨提示

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

评论

0/150

提交评论