计算机图形学实验五直线段裁剪.docx
- 文档编号:12738805
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:11
- 大小:21.65KB
计算机图形学实验五直线段裁剪.docx
《计算机图形学实验五直线段裁剪.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验五直线段裁剪.docx(11页珍藏版)》请在冰豆网上搜索。
计算机图形学实验五直线段裁剪
计算机图形学实验报告
黔南民族师范学院信息与计算科学
撰写人姓名:
__撰写时间:
2010年5月5日审查人姓名:
实验过程记录
实验名称
实验五:
实现线段的任意一种裁剪算法
时间
实验学时
地点
数学系机房
姓名
班级
学号
组
一、实验目的:
1、通过实验,进一步理解和掌握直线段的裁剪算法;
2、通直线段的裁剪。
二、实验内容:
要求:
•1、进一步理解并掌握线段的裁剪算法,并可以实践至少一种线段的裁剪算法;
•2、注意:
本次作业要求学生不能直接使用系统提供的线段裁剪函数,但是可以调用相关的画点、画线函数。
三、实验设备及软件
软件需求:
windows98以上操作系统、TurboC2.0、TurboC++3.0、VisualC++软件、MicrosoftWord97或2000。
硬件需求:
建议PentiumIVCPU处理器、64MB以上内存、1GB以上硬盘空间的计算机、激光打印机
四、实验方法及步骤
1实验准备
上该实验课前将针对解决实验内容问题的C语言程序编制好,在实验课上,对编制完的程序进行调试、修改和分析,熟悉TurboC2.0的菜单,以及编译,运行程序和调试程序的方法,并编写程序。
2.调试程序;
程序一:
#defineLEFT1
#defineRIGHT2
#defineBOTTOM4
#defineTOP8
#defineXL150
#defineXR350
#defineYB150
#defineYT300
#include
#include"graphics.h"
main()
{intgdriver=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)
intx,y;
int*code;
{intc;
c=0;
if(x elseif(x>XR)c=c|RIGHT; if(y elseif(y>YT)c=c|TOP; *code=c; return; } draw_ett() {intx1,x2,y1,y2,x,y; intcode1,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); } elseif((RIGHT&code)! =0) { x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1); } elseif((BOTTOM&code)! =0) { y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1); } elseif((TOP&code)! =0) { y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1); } if(code==code1) {x1=x; y1=y; encode(x,y,&code1); } else {x2=x; y2=y; encode(x,y,&code2); } } setcolor(14); line(x1,y1,x2,y2); return; } 运行结果: 程序二: 请按书上P109的Cohen-Sutherland算法写出完整的程序,并运行出效果图,可参考以上程序一 #defineXL150 #defineXR350 #defineYB150 #defineYT300 #defineFALSE0 #defineTRUE1 #include #include"graphics.h" typedefstruct{ intxmin,xmax,ymin,ymax; }Rectangle; typedefintboolean; typedefstruct{ unsignedall; unsignedleft,right,top,bottom; }OutCode; voidCompOutCode(floatx,floaty,Rectangle*rect,OutCode*outCode) { outCode->all=0; outCode->top=outCode->bottom=0; if(y>(float)rect->ymax) { outCode->top=1; outCode->all+=1; } elseif(y<(float)rect->ymin) { outCode->bottom=1; outCode->all+=1; } outCode->right=outCode->left=0; if(x>(float)rect->xmax) { outCode->right=1; outCode->all+=1; } elseif(x<(float)rect->xmin) { outCode->left=1; outCode->all+=1; } } voidCSLineClip(floatx0,floaty0,floatx1,floaty1,Rectangle*rect) { booleanaccept,done; OutCodeoutCode0,outCode1; OutCode*outCodeOut; floatx,y; accept=FALSE; done=FALSE; CompOutCode(x0,y0,rect,&outCode0); CompOutCode(x1,y1,rect,&outCode1); do{ if(outCode0.all==0&&outCode1.all==0) { accept=TRUE; done=TRUE; } elseif(outCode0.all&outCode1.all! =0) done=TRUE; else { if(outCode0.all! =0) outCodeOut=&outCode0; else outCodeOut=&outCode1; if(outCodeOut->left) { y=y0+(y1-y0)*(rect->xmin-x0)/(x1-x0); x=(float)rect->xmin; } elseif(outCodeOut->top) { x=x0+(x1-x0)*(rect->ymax-y0)/(y1-y0); y=(float)rect->ymax; } elseif(outCodeOut->right) { y=y0+(y1-y0)*(rect->xmax-x0)/(x1-x0); x=(float)rect->xmax; } elseif(outCodeOut->bottom) { x=x0+(x1-x0)*(rect->ymin-y0)/(y1-y0); y=(float)rect->ymin; } if(outCodeOut->all==outCode0.all) { x0=x; y0=y; CompOutCode(x0,y0,rect,&outCode0); } else { x1=x; y1=y; CompOutCode(x1,y1,rect,&outCode1); } } }while(! done); if(accept) { line((int)x0,(int)y0,(int)x1,(int)y1); } } main() {intgdriver=DETECT,gmode; Rectanglerect; rect.xmin=XL; rect.xmax=XR; rect.ymin=YB; rect.ymax=YT; 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 (2); line(100,100,300,400); setcolor(WHITE); CSLineClip(100,100,300,400,&rect); getch(); closegraph(); } 成绩评定: 指导教师:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 直线 裁剪