计算机图形学 实验一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学系实验报告

课程名称计算机图形学班级

实验名称TC绘制基本图形教导教师

姓名学号日期

一、实验目的

1.掌握直线DDA算法,直线Bresenham算法,圆Bresenham算法;

2.掌握种子填充算法,汉字显示算法。

二、实验设备与环境

TC2.0,Windows XP

三、实验内容、程序清单及运行结果

实验步骤:

#include

#include "stdafx.h"

#include "graphics.h"

#include

#include "windows.h"

#include

#define ROW 1 /*纵坐标放大倍数*/

#define COL 1 /*横坐标放大倍数*/

//DDA直线

void 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);

else steps=abs(dy);

delta_x=(float)dx/(float)steps;

delta_y=(float)dy/(float)steps;

x=xa;

y=ya;

putpixel(x,y,c);

for(k=1;k<=steps;k++)

{x+=delta_x;

y+=delta_y;

putpixel(x,y,c);

}

}

//Bresenham直线

void lineBres(int x0, int y0, int xEnd, int yEnd,int c)

{

int dx = fabs (xEnd -x0), dy = fabs (yEnd-y0);

int p =2* dy-dx;

int twoDy = 2*dy, twoDyMinusDx = 2* (dy - dx);

int x,y;

if (x0>xEnd)

{

x=xEnd;

y=yEnd;

xEnd=x0;

}

else{

x=x0;

y=y0;

}

putpixel (x,y,c);

while (x

{

x++;

if(p<0)

p+=twoDy;

else{

y++;

p+=twoDyMinusDx;

}

putpixel (x,y,c);

}

}

//Bresenham圆

plot_circle_points(int xc,int yc,int x,int y,int c) {

putpixel(xc+x,yc+y,c);

putpixel(xc-x,yc+y,c);

putpixel(xc+x,yc-y,c);

putpixel(xc-x,yc-y,c);

putpixel(xc+y,yc+x,c);

putpixel(xc-y,yc+x,c);

putpixel(xc+y,yc-x,c);

putpixel(xc-y,yc-x,c);

}

circle(int xc,int yc,int radius,int c)

{

int x,y,p;

x=0;

y=radius;

p=3-2*radius;

while(x

plot_circle_points(xc,yc,x,y,c);

if(p<0) p=p+4*x+6;

else{

p=p+4*(x-y)+10;

y-=1;

}

x+=1;

}

if (x==y)

plot_circle_points(xc,yc,x,y,c);

}

//种子填充

void seed_filling(int x,int y,int fill_color,int boundary_color) {

int c;

c=getpixel(x,y);

if((c!=boundary_color)&&(c!=fill_color))

{putpixel(x,y,fill_color);

seed_filling(x+1,y,fill_color,boundary_color);

seed_filling(x-1,y,fill_color,boundary_color);

seed_filling(x,y+1,fill_color,boundary_color);

seed_filling(x,y-1,fill_color,boundary_color);

}

}

//汉字

void hanzi(char *s)

{

int x,y;

FILE *fp;

char buffer[32]; /*buffer用来存储一个汉字*/

register m,n,i,j,k;

unsigned char qh,wh;

unsigned long offset;

if ((fp=fopen("hzk16","rb"))==NULL)

/*打开汉字库,该字库可以在ucdos中找到*/

{printf("Can't open haz16,Please add it");

相关文档
最新文档