计算机图形学实验报告
黔南民族师范学院信息与计算科学
撰写人姓名: __ 撰写时间:2010年5月5日 审查人姓名:
实验过程记录
实验名称
实验五:实现线段的任意一种裁剪算法
时 间
实验学时
地 点
数学系机房
姓 名
班级
学号
组
实验目的:
通过实验,进一步理解和掌握直线段的裁剪算法;
通直线段的裁剪。
二、 实验内容:
要求:
?1 、进一步理解并掌握线段的裁剪算法,并可以实践至少一种线段的裁剪算法;
?2、注意:本次作业要求学生不能直接使用系统提供的线段裁剪函数,但是可以调用相关的画点、画线函数。
三、实验设备及软件
软件需求:windows98以上操作系统、Turbo C 2.0 、Turbo C++ 3.0、Visual C++软件、Microsoft Word 97或2000。
硬件需求:建议Pentium IV CPU处理器、64MB以上内存、1GB以上硬盘空间的计算机、激光打印机
四、实验方法及步骤
1实验准备
上该实验课前将针对解决实验内容问题的C语言程序编制好,在实验课上,对编制完的程序进行调试、修改和分析,熟悉TurboC2.0的菜单,以及编译,运行程序和调试程序的方法,并编写程序。
2.调试程序;
程序一:
#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define XL 150
#define XR 350
#define YB 150
#define YT 300
#include
#include"graphics.h"
main()
{ int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\tc");
setcolor(12);
line(XL,YT,XR,YT);
line(XL,YB,XR,YB);
line(XL,YT,XL,YB);
line(XR,YT,XR,YB);
setcolor(9);
draw_ett();
getch();
closegraph();
}
encode (x,y,code)
int x,y;
int *code;
{ int c;
c=0;
if (x
else if (x>XR) c=c|RIGHT;
if (y
else if (y>YT) c=c|TOP;
*code=c;
return;
}
draw_ett()
{ int x1,x2,y1,y2,x,y;
int code1,code2,code;
/* printf("XL=150,XR=350,YB=150,YT=300\n");
scanf("%d,%d,%d,%d",&x1,&y1,&x2,&y2);*/
x1=50;
y1=210;
x2=300;
y2=100;
setcolor(2);
line(x1,y1,x2,y2);
encode(x1,y1,&code1);
encode(x2,y2,&code2);
while ((code1!=0)||(code2!=0))
{
if ((code1&code2)!=0) return;
code=code1;
if (code1==0) code=code2;
if ((LEFT&code)!=0)
{
x=XL;
y=y1+(y2-y1)*(XL-x1)/(x2-x1);
}
else if ((RIGHT&code)!=0)
{
x=XR;
y=y1+(y2-y1)*(XR-x1)/(x2-x1);
}
else if ((BOTTOM&code)!=0)
{
y=YB;
x=x1+(x2-x1)*(YB-y1)/(y2-y1);
}
else if ((TOP&code)!=0)
{
y=YT;
x=x1+(x2-x1)*(YT-