⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.7.3.c

📁 计算机图形学
💻 C
字号:
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
void initgr(void) /* BGI初始化 */
{
  int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
  registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
  initgraph(&gd, &gm, "");
}

typedef struct{
int xmin;int xmax;int ymin;int ymax;}Rectangle;

void painRectangle(Rectangle *rect,int color)
{  setcolor(color);
line(rect->xmin,rect->ymin,rect->xmax,rect->ymin) ;
line(rect->xmax,rect->ymin,rect->xmax,rect->ymax) ;
line(rect->xmax,rect->ymax,rect->xmin,rect->ymax) ;
line(rect->xmin,rect->ymax,rect->xmin,rect->ymin) ;
}

int ClipT(float q,float d,float *t0,float *t1)
{float r;
if(q<0)
{r=d/q;
if(r>*t1)
return 0;
else if(r>*t0)
{*t0=r;
return 1;}
}
else if(q>0)
{
r=d/q;
if(r<*t0)
return 0;
else if(r<*t1)
{*t1=r;
return 1;}
}
else if(d<0)
return 0;
return 1;
}

void LiangBarskycaijian(float x0,float y0,float x1,float y1,Rectangle *rect)
{ float delatx,delaty,t0,t1;
t0=0,t1=1;
delatx=x1-x0;
if(ClipT(-delatx,x0-rect->xmin,&t0,&t1))
if(ClipT(delatx,rect->xmax-x0,&t0,&t1))
   {delaty=y1-y0;
  if(ClipT(-delaty,y0-rect->ymin,&t0,&t1))
  {if(ClipT(delaty,rect->ymax-y0,&t0,&t1))
  line((int)(x0+t0*delatx),(int)(y0+t0*delaty),(int)(x0+t1*delatx),(int)(y0+t1*delaty)) ;
  return ;
  }
}outtext("P0P1完全不可见");
  }



main()
{Rectangle *rect;
initgr();
rect=(Rectangle *)malloc(sizeof(Rectangle));
 rect->xmin=80;rect->xmax=250;rect->ymin=90;rect->ymax=240;
 painRectangle(rect,14) ;
 setcolor(3);
 line(30,50,300,150);
 line(100,100,60,300);
 setcolor(14);
 LiangBarskycaijian(30.0,50.0,300.0,150.0,rect) ;
 LiangBarskycaijian(100,100,60,300,rect) ;
 getch();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -