计算机图形学实验二:直线的生成算法的实现

计算机图形学实验二:直线的生成算法的实现

ID:11270726

大小:40.00 KB

页数:6页

时间:2018-07-11

计算机图形学实验二:直线的生成算法的实现_第1页
计算机图形学实验二:直线的生成算法的实现_第2页
计算机图形学实验二:直线的生成算法的实现_第3页
计算机图形学实验二:直线的生成算法的实现_第4页
计算机图形学实验二:直线的生成算法的实现_第5页
资源描述:

《计算机图形学实验二:直线的生成算法的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二:直线的生成算法的实现班级08信计2班学号20080502055姓名分数一、实验目的和要求:1、理解直线生成的原理;2、掌握几种常用的直线生成算法;3、利用C实现直线生成的DDA算法。二、实验内容:1、了解直线的生成原理2、掌握几种基本的直线生成算法:DDA画线法、中点画线法、Bresenham画线法。3、仿照教材关于直线生成的DDA算法,编译程序。4、调试、编译、运行程序。三、实验过程及结果分析1、直线DDA算法:算法原理:已知过端点P0(x0,y0),P1(x1,y1)的直线段L(P0,

2、P1),斜率为k=(y1-y0)/(x1-x0),画线过程从x的左端点x0开始,向x右端点步进,步长为1个像素,计算相应的y坐标为y=kx+B。计算yi+1=kxi+B=kxi+B+kx=yi+kx当x=1,yi+1=yi+k,即当x每递增1,y递增k。由计算过程可知,y与k可能为浮点数,需要取y整数,源程序中round(y)=(int)(y+0.5)表示y四舍五入所得的整数值。(1)程序代码:#include"stdio.h"#include"graphics.h"voidlinedda(int

3、x0,inty0,intx1,inty1,intcolor){intx,dy,dx,y;floatm;dx=x1-x0;dy=y1-y0;m=dy/dx;y=y0;for(x=x0;x<=x1;x++){putpixel(x,(int)(y+0.5),color);y+=m;setbkcolor(7);}}main(){inta,b,c,d,e;intgraphdriver=DETECT;intgraphmode=0;initgraph(&graphdriver,&graphmode,"");a=

4、100;b=100;c=200;d=300;e=5;linedda(a,b,c,d,e);getch();closegraph();}运行结果:2、中点画线算法:假定所画直线的斜率为k∈[0,1],如果在x方向上增量为1,则y方向上的增量只能在0~1之间。中点画线法的原理是:假设x坐标为xp的各像素点中,与直线最近着已经确定,为P(xp,yp),用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的P1(xp+1,yp),或右上方的P2(xp+1,yp+1),用小空心圆表示。程序代码:#inc

5、lude"stdio.h"#include"graphics.h"voidmidpointline(intx0,inty0,intx1,inty1,intcolor){inta,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;putpixel(x,y,color);while(x

6、utpixel(x,y,color);setbkcolor(7);}}main(){inta,b,c,d,e;intgraphdriver=DETECT;intgraphmode=0;initgraph(&graphdriver,&graphmode,"");a=50;b=100;c=200;d=300;e=5;midpointline(a,b,c,d,e);getch();closegraph();}运行结果:3、Bresenham画线算法:Bresenham算法的基本原理是:过各行各列像素中心

7、构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。程序代码:#include#includevoidbresenhamline(x1,y1,x2,y2,color)intx1,y1,x2,y2,color;{intdx;intdy;intx;inty;intd;intd1;intd2;intinc;inttmp;dx=x2-x1;dy=y2-y1;if(dx*dy>=0)inc=1;elsein

8、c=-1;if(abs(dx)>abs(dy)){if(dx<0){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;dx=-dy;dy=-dy;}d=2*dy-dx;d1=2*dy;d2=2*(dy-dy);x=x1;y=y1;putpixel(x,y,color);while(x

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。