程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 編碼裁剪算法

編碼裁剪算法

編輯:關於C

編碼裁剪算法
     用任意顏色繪制窗口,並用一種顏色繪制線段,利用編碼裁剪算法對線段進行裁剪。要求能夠演示出裁剪過程,裁剪前的圖形要繪出,當按下任意按鍵,繪制出裁剪結果。請使用TC打開源程序:
#include<stdio.h>
#include<graphics.h>
#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define FALSE 0
#define TRUE 1
void Line_Clipping(x1,y1,x2,y2,xw_xmin,yw_ymin,xw_xmax,yw_ymax)
float x1,y1,x2,y2,xw_xmin,yw_ymin,xw_xmax,yw_ymax;
{
 int draw,done;
 int code1,code2,code;
 float x,y;
 draw=FALSE;done=FALSE;
 code1=get_code(x1,y1,xw_xmin,yw_ymin,xw_xmax,yw_ymax);
 code2=get_code(x2,y2,xw_xmin,yw_ymin,xw_xmax,yw_ymax);
 while(!done)
 {
  if(code1==0&&code2==0)
  {
   draw=TRUE;done=TRUE;
  }
  else if(code1&code2!=0)
  {
   done =TRUE;
  }else
  {
   if(code1!=0)
   code=code1;
   else
   code=code2;
  if((code&TOP)!=0)
  {y=yw_ymax;
  x=x1+(y-y1)*(x2-x1)/(y2-y1);

  }
else if((code&BOTTOM)!=0)
{
 y=yw_ymin;
 x=x1+(y-y1)*(x2-x1)/(y2-y1);
}
else if((code&RIGHT)!=0)
{
 x=xw_xmax;
 y=y1+(x-x1)*(y2-y1)/(x2-x1);
}
else if((code&LEFT)!=0)
{
 x=xw_xmin;
 y=y1+(x-x1)*(y2-y1)/(x2-x1);
}
if(code==code1)
{
 x1=x;
 y1=y;
 code1=get_code(x1,y1,xw_xmin,yw_ymin,xw_xmax,yw_ymax);
}
else
{
 x2=x;
 y2=y;
 code2=get_code(x2,y2,xw_xmin,yw_ymin,xw_xmax,yw_ymax);
}
}
if(draw)
{
 setcolor(8);
  line(x1,y1,x2,y2);
}
}
}
int get_code(x,y,xw_xmin,yw_ymin,xw_xmax,yw_ymax)
float x,y,xw_xmin,yw_ymin,xw_xmax,yw_ymax;
{
 int code;
 code=0;
 if(y>yw_ymax)
 code|=TOP;
 else if(y<yw_ymin)
 code|=BOTTOM;
 if(x>xw_xmax)
 code|=RIGHT;
 else if(x<xw_xmin)
 code|=LEFT;
 return code;
}
void main()
{
 float x1=76,y1=40,x2=60,y2=80,xw_xmin=50,xw_xmax=80,yw_ymin=50,yw_ymax=70;
 int gdriver=DETECT,gmode;
 initgraph(&gdriver,&gmode,"C:\\TURBOC2");
 setcolor(5);
 line(x1,y1,x2,y2);
 rectangle(xw_xmin,yw_ymin,xw_xmax,yw_ymax);
 getch();
 cleardevice();
 setcolor(8);
 rectangle(xw_xmin,yw_ymin,xw_xmax,yw_ymax);
 Line_Clipping(x1,y1,x2,y2,xw_xmin,yw_ymin,xw_xmax,yw_ymax);
 getch();
 closegraph();
}


摘自 pzhsunxu的專欄
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved