计算机图形学直线算法论文,计算机图形学--直线的生成算法的实现.doc

计算机图形学--直线的生成算法的实现.doc

实验二:直线的生成算法的实现

班级 08信计2班 学号 20080502048 姓名 段志英 分数

一、实验目的与要求:

1、了解WIN-TC1.72等编程环境中常用控件命令与绘图函数,初步掌握在实验设计集成环境下进行图形处理程序的设计方法。

2、熟练掌握直线的三种扫描转换算法:DDA算法、改进的Bresenham算法和中点算法。

二、实验内容:

1、在WIN-TC1.72环境中设计程序,利用消息处理函数,搭建能运行图形算法程序的平台。

2、在平台中使用已有的点、线等绘图函数,设计一个平面图形。WIN-TC1.72基本绘图函数可参考有关文献。

3、根据教材中给定的算法,实现直线段的三种生成算法:DDA算法、改进的Bresenham算法和中点算法。

三、DDA算法程序实现的完整源程序

#include

#include

#include

#define YS 100000

dda_line(int xa,int ya,int xb,int yb,int c)

{

float delta_x,delta_y,x,y;

int dx,dy,steps,k;

dx=xb-xa;

dy=yb-ya;

if(abs(dx)>abs(dy)) /*判断步长的方向*/

steps=abs(dx); /*steps作为控制数K<1*/

else

steps=abs(dy); /*steps作为控制数K>1*/

delta_x=(float)dy / (float)steps; /*值为±1域±1/m*/

delta_y=(float)dy / (float)steps; /*值为±1域±m*/

x=xa;

y=ya;

putpixel(x,y,c); /*画起点,c为点的颜色*/

for(k=1;k<=steps;k++) /*循坏画点成直线*/

{

x+=delta_x;

y+=delta_y;

putpixel(x,y,c);

delay(YS);

}

}

main()

{

int x1=250,y1=250,x2=300,y2=300,c=5;

int dx,dy,n,k,i,f;

int x,y;

int gdriver,gmode;

gdriver=DETECT;

initgraph(&gdriver,&gmode," ");

dda_line(x1,y1,x2,y2,c);

getch();

closegraph();

}

(2)改进的Bresenham画线算法程序实现的完整源程序

#include

#include

#include

#define YS 100000

bresenham_line(int x0,int y0,int x1,int y1,int c)

{

int x,y,dx,dy,e,i;

dx=x1-x0;

dy=y1-y0;

e=-dx;

x=x0,y=y0;

for(i=0;i<=dx;i++)

{

putpixel(x,y,c++);/*c++不同描点不同颜色*/

delay(YS);

x++,e=e+2*dy;

if(e>0){y++;e=e-2*dx;}

}

}

main()

{

int x0=100,y0=100,x1=200,y1=200,c=1;

int gdriver,gmode;

gdriver=DETECT;

initgraph(&gdriver,&gmode," ");

bresenham_line(x0,y0,x1,y1,c);

getch();

closegraph();

}

(3)中点算法实现的完整源程序

#include

#include

#include

#include

#include

#define rad 0.0174532925

#define NUMBER 24

/*此程序 写出的图形,(0,0)在左上方,即以原y轴的负半轴为正,x轴不变,类似于抛物运动。*/

/*此程序 写出的图形,(0,0)在左上方,即以原y轴的负半轴为正,x轴不变,类似于抛物运动。*/

main()

{float xa,xb,ya,yb;

float dex,dey,dx,dy;

flo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值