📄 4.7.3.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 + -