荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: playboy (为了钱,努力!), 信区: Program
标  题: 多边形裁剪
发信站: BBS 荔园晨风站 (Wed Jan 12 08:47:01 2000), 转信

#include<graphics.h>
#include<stdlib.h>
#include <conio.h>
#include <stdio.h>

#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define ML 200
#define MR 400
#define MB 100
#define MT 400
#define Esc 27
#define Speed 8
#define Dnum 6
#define Colors BLUE

int c_s_draw(int [],int);
int c_s_line(int *,int *,int *,int *,int );
int draws(int *,int);
void main()
{
  int driver=DETECT,mode;
  char ch=0;
  int st;
  int cdraw[Dnum*2]={230,250,300,150,350,200,325,300,280,350,270,255};

 initgraph(&driver,&mode,"F:\\TURBOC3");
  setcolor(GREEN);
  rectangle(ML-1,MT+1,MR+1,MB-1);
  setcolor(Colors);
  c_s_draw(cdraw,Dnum);
  while(ch!=Esc)
  {
    switch(ch)
    {
      case 0x48:setcolor(BLACK);
                c_s_draw(cdraw,Dnum);
                setcolor(Colors);
                for(st=0;st<Dnum;st++)cdraw[st*2+1]-=Speed;
                c_s_draw(cdraw,Dnum);
                break;
      case 0x50:setcolor(BLACK);
                c_s_draw(cdraw,Dnum);
                setcolor(Colors);
                for(st=0;st<Dnum;st++)cdraw[st*2+1]+=Speed;
                c_s_draw(cdraw,Dnum);
                break;
      case 0x4b:setcolor(BLACK);
                c_s_draw(cdraw,Dnum);
                setcolor(Colors);
                for(st=0;st<Dnum;st++)cdraw[st*2]-=Speed;
                c_s_draw(cdraw,Dnum);
                break;
      case 0x4d:setcolor(BLACK);
                c_s_draw(cdraw,Dnum);
                setcolor(Colors);
                for(st=0;st<Dnum;st++)cdraw[st*2]+=Speed;
                c_s_draw(cdraw,Dnum);
                break;
    }
    ch=getch();
  }
  closegraph();
}

int encode(int x,int y)
{
  int c=0;
  if(x<ML)c|=LEFT;
  else if(x>MR)c|=RIGHT;
  if(y<MB)c|=BOTTOM;
  else if(y>MT)c|=TOP;
  return c;
}

int c_s_draw(int cdraw[],int num)
{
  int *cdraws=(int*)malloc(sizeof(int)*num*4);
  int *cdraw2=(int*)malloc(sizeof(int   {
                       x=ML;
                       y=*y1+(float)(*y2-*y1)*(ML-*x1)/(*x2-*x1);
                     }
                     break;
        case RIGHT : if(c&RIGHT)
                     {
                       x=MR;
                       y=*y1+(float)(*y2-*y1)*(MR-*x1)/(*x2-*x1);
                     }
                     break;
        case BOTTOM: if(c&BOTTOM)
                     {
                       x=*x1+(float)(*x2-*x1)*(MB-*y1)/(*y2-*y1);
                       y=MB;
                     }
                     break;
        case TOP   : if(c&TOP)
                     {
                       x=*x1+(float)(*x2-*x1)*(MT-*y1)/(*y2-*y1);
                       y=MT;
                     }
                     break;
      }
      if(c==c1){
        *x1=(int)x+0.5;
        *y1=(int)y+0.5;
      }
      else
      {
        *x2=(int)x+0.5;
        *y2=(int)y+0.5;
      }
      retb=c_s_line(x1,y1,x2,y2,direction);
    }
  return retb;
}

--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店