付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告实验4:直线或多边形裁剪实验目的:实现标准矩形窗口的裁剪,窗口由键盘输入或鼠标确定,直线/多边形都是任意的。裁剪后的图形要准确,不能多或者少点。实验内容及要求:对于直线/多边形的裁剪实验,要求实现标准矩形窗口的裁剪,窗口由键盘输入或鼠标确定,直线/多边形都是任意的。裁剪后的图形要准确,不能多或者少点。对于上述两个实验都要求掌握各自算法的基本原理和算法设计,画出算法实现的程序流程图,使用C或者VC++实现算法,并演示。实验原理:实验代码:#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<graphics.h>typedefstruct{floatx,y;}Point;voidinitgraphics(void);voidCode(PointFrameLT,PointFrameRB,PointP,unsignedchar*Flag);voidClipping(PointFrameLT,PointFrameRB,PointLineSP,PointLineEP);voidmain(void){PointFrameLT,FrameRB;PointP[3];initgraphics();setcolor(RED);FrameLT.x=200;FrameLT.y=100;FrameRB.x=460;FrameRB.y=360;rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y);P[0].x=330;P[0].y=80;P[1].x=150;P[1].y=300;P[2].x=510;P[2].y=200;line((int)P[0].x,(int)P[0].y,(int)P[1].x,(int)P[1].y);line((int)P[0].x,(int)P[0].y,(int)P[2].x,(int)P[2].y);line((int)P[1].x,(int)P[1].y,(int)P[2].x,(int)P[2].y);getch();cleardevice();rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y);Clipping(FrameLT,FrameRB,P[0],P[1]);Clipping(FrameLT,FrameRB,P[0],P[2]);Clipping(FrameLT,FrameRB,P[1],P[2]);getch();closegraph();}voidinitgraphics(void){intdriver=VGA,mode=VGAHI;interrcode;initgraph(&driver,&mode,"");if((errcode=graphresult())!=0){printf("Graphicserror:%s\n",grapherrormsg(errcode));exit(1);}}voidCode(PointFrameLT,PointFrameRB,PointP,unsignedchar*Flag){unsignedcharflag=0;if(P.x<FrameLT.x)flag+=1;if(P.x>FrameRB.x)flag+=2;if(P.y>FrameRB.y)flag+=4;if(P.y<FrameLT.y)flag+=8;(*Flag)=flag;}voidClipping(PointFrameLT,PointFrameRB,PointLineSP,PointLineEP){unsignedcharflagSP,flagEP,flagAND,flagOR;doublek=(LineEP.y-LineSP.y)/(LineEP.x-LineSP.x);Code(FrameLT,FrameRB,LineSP,&flagSP);Code(FrameLT,FrameRB,LineEP,&flagEP);flagAND=flagSP&flagEP;if(flagAND!=0)return;while(flagSP!=0||flagEP!=0){flagOR=flagSP|flagEP;if((flagOR&0x01)==1){if((flagSP&0x01)==1){LineSP.y=LineSP.y+k*(FrameLT.x-LineSP.x);LineSP.x=FrameLT.x;Code(FrameLT,FrameRB,LineSP,&flagSP);}else{LineEP.y=LineEP.y+k*(FrameLT.x-LineEP.x);LineEP.x=FrameLT.x;Code(FrameLT,FrameRB,LineEP,&flagEP);}}if((flagOR&0x02)==2){if((flagSP&0x02)==2){LineSP.y=LineSP.y+k*(FrameRB.x-LineSP.x);LineSP.x=FrameRB.x;Code(FrameLT,FrameRB,LineSP,&flagSP);}else{LineEP.y=LineEP.y+k*(FrameRB.x-LineEP.x);LineEP.x=FrameRB.x;Code(FrameLT,FrameRB,LineEP,&flagEP);}}if((flagOR&0x04)==4){if((flagSP&0x04)==4){LineSP.x=LineSP.x+(FrameRB.y-LineSP.y)/k;LineSP.y=FrameRB.y;Code(FrameLT,FrameRB,LineSP,&flagSP);}else{LineEP.x=LineEP.x+(FrameRB.y-LineEP.y)/k;LineEP.y=FrameRB.y;Code(FrameLT,FrameRB,LineEP,&flagEP);}}if((flagOR&0x08)==8){if((flagSP&0x08)==8){LineSP.x=LineSP.x+(FrameLT.y-LineSP.y)/k;LineSP.y=FrameLT.y;Code(FrameLT,FrameRB,LineSP,&flagSP);}else{LineEP.x=LineEP.x+(FrameLT.y-LineEP.y)/k;LineEP.y=FrameLT.y;Code(FrameLT,FrameRB,LineEP,&flagEP);}flagAND=flagSP&flagEP;if(flagAND!=0)return;}line((int)LineSP.x,(int)LineSP.y,(int)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职交通运输管理(交通流量调控)试题及答案
- 2025年高职(连锁经营管理)门店运营单元测试试题及答案
- 2025年高职(中药制药技术)中药制剂试题及答案
- 2025年高职艺术设计(艺术教育心理学案例分析)试题及答案
- 2026年音响设备销售(安装指导)试题及答案
- 痤疮瘢痕科普
- 中国人工智能发展路线图
- 医患和谐主题小品
- 2025云南昆明市盘龙区博物馆公益性岗位招聘2人备考题库及答案详解(夺冠系列)
- 2025新疆博乐市市场监管局招聘2人备考题库及完整答案详解一套
- 2025-2026学年北京市西城区高三(上期)期末考试生物试卷(含答案)
- 2026广西北部湾大学公开招聘高层次人才76人笔试参考题库及答案解析
- 2026浙江宁波市江北区城市建设投资发展有限公司及下属子公司招聘7人笔试模拟试题及答案解析
- 2026年雅安职业技术学院单招综合素质考试备考题库带答案解析
- 2026年三亚交投产业发展有限公司招聘备考题库及参考答案详解
- 章丘区2024山东济南市章丘区龙山街道残联招聘“一专两员”1人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 义务消防员培训课件
- 2025年时事政治必考试题库完整参考答案及参考答案详解
- 消化内镜虚拟仿真训练系统的技术参数优化
- 2026年安徽粮食工程职业学院单招综合素质考试题库含答案详解
- 2025贵州黔西南州安龙县选聘城市社区工作者工作61人备考题库完整答案详解
评论
0/150
提交评论