计算机图形学 实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");