东北大学计算机图形学研究生作业--机械学院
(5页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
11.9 积分
1200443 LYT 作业二:线段裁剪(TurboC)#include"graphics.h"main(){int i,x1,x2,y1,y2,a[14][3]={{70,70},{70,370},{570,370},{570,70},{40,100},{100,40},{30,300},{50,260},{200,220},{250,180},{340,400},{420,320},{450,260},{620,260}};double t; /*建立十点矩阵*/int gdriver=VGA,gmode=VGAHI,color; /*图形函数初始化*/initgraph(&gdriver,&gmode,"C:\\Program Files\\WINYES\\TC20H\\BGI");cleardevice();setcolor(RED);setbkcolor(WHITE);line(a[0][0],a[0][1],a[1][0],a[1][1]); /*作出图框和线段*/ line(a[1][0],a[1][1],a[2][0],a[2][1]);line(a[2][0],a[2][1],a[3][0],a[3][1]);line(a[3][0],a[3][1],a[0][0],a[0][1]);line(a[4][0],a[4][1],a[5][0],a[5][1]);line(a[6][0],a[6][1],a[7][0],a[7][1]);line(a[8][0],a[8][1],a[9][0],a[9][1]);line(a[10][0],a[10][1],a[11][0],a[11][1]);line(a[12][0],a[12][1],a[13][0],a[13][1]);getch();for(i=4;i<14;i++) /*扫描各点,将各点编码*/{if(((a[i][0]>=70)&&(a[i][0]<=570))&&((a[i][1]>=70)&&(a[i][1]<=370))) a[i][2]=0;if(((a[i][0]>=0)&&(a[i][0]<70))&&((a[i][1]>=0)&&(a[i][1]<70))) a[i][2]=1;if(((a[i][0]>=0)&&(a[i][0]<70))&&((a[i][1]>=70)&&(a[i][1]<=370))) a[i][2]=2;if(((a[i][0]>=0)&&(a[i][0]<70))&&((a[i][1]>370)&&(a[i][1]<480))) a[i][2]=3;if(((a[i][0]>=70)&&(a[i][0]<=570))&&((a[i][1]>370)&&(a[i][1]<480))) a[i][2]=4;if(((a[i][0]>570)&&(a[i][0]<640))&&((a[i][1]>370)&&(a[i][1]<480))) a[i][2]=5;if(((a[i][0]>570)&&(a[i][0]<640))&&((a[i][1]>=70)&&(a[i][1]<=370))) a[i][2]=6;if(((a[i][0]>570)&&(a[i][0]<640))&&((a[i][1]>0)&&(a[i][1]<70))) a[i][2]=7;if(((a[i][0]>=70)&&(a[i][0]<=570))&&((a[i][1]>=0)&&(a[i][1]<70))) a[i][2]=8;}for(i=4;i<13;i+=2) /*第一种情况,变底色擦除在框线同侧的外侧线*/{if(((a[i][2]>0)&&(a[i][2]<=3))&&((a[i+1][2]>0)&&(a[i+1][2]<=3))) {setcolor(WHITE);line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}if(((a[i][2]>=3)&&(a[i][2]<=5))&&((a[i+1][2]>=3)&&(a[i+1][2]<=5))) {setcolor(WHITE);line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}if(((a[i][2]>=5)&&(a[i][2]<=7))&&((a[i+1][2]>=5)&&(a[i+1][2]<=7))) {setcolor(WHITE);line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}if(((a[i][2]==1)||(a[i][2]==7)||(a[i][2]==8))&&((a[i+1][2]==1)||(a[i+1][2]==7)||(a[i+1][2]==8))) {setcolor(WHITE);line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}}for(i=4;i<13;i+=2) /*第二种情况,对于一半在外一般在内的线段求交点坐标,变底色擦除*/{if((a[i][2]==2)&&(a[i+1][2]==8)) {t=(a[i+1][1]-a[i][1])/(a[i+1][0]-a[i][0]); x1=70;y2=70; y1=t*(x1-a[i][0])+a[i][1]; x2=(y2+t*a[i][0]-a[i][1])/t; if((x2==70)&&(y1==70)) {setcolor(WHITE);line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}} if((a[i][2]==4)&&(a[i+1][2]==0)){t=(a[i+1][1]-a[i][1])/(a[i+1][0]-a[i][0]); x2=(370+t*a[i][0]-a[i][1])/t;setcolor(WHITE);line(a[10][0],a[10][1],x2,a[2][1]);} if((a[i][2]==0)&&(a[i+1][2]==6)) {if(a[i][1]==a[i+1][1]) {setcolor(WHITE); line(570,260,a[i+1][0],a[i+1][1]);}}}putpixel(70,70,RED); /*补点*/putpixel(370,370,RED);getch();closegr 关 键 词: 东北 大学计算机 图形学 研究生 作业 机械学院
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。