#include<graphics.h> |
#include <conio.h> |
#include<stdio.h> |
int clip( float p, float q, float *u1, float *u2) |
{ |
float r; |
if (p<0.0) |
{ |
r=q/p; |
if (r>*u2) return 0; |
else |
if (r>*u1) |
{ |
*u1=r; /*u1取0和r之间的最大值*/ |
return 1; |
} |
} |
else |
if (p>0.0) |
{ |
r=q/p; |
if (r<*u1) return 0; |
else |
if (r<*u2) |
{ |
*u2=r; /*u2取1和r之间的最小值*/ |
return 1; |
} |
} |
else |
if (q<0) return 0; /*线段平行边界,舍弃*/ |
return 1; |
} |
void main( void ) |
{ |
float x1=80,y1=150,x2=420,y2=350,xl=100,xr=400,yb=100,yt=400; |
float dx,dy,u1,u2; |
int gdriver=DETECT,gmode; |
initgraph(&gdriver,&gmode, "" ); |
u1=0;u2=1; |
dx=x2-x1; |
line(80,150,420,350); |
rectangle(100,100,400,400); |
getch(); |
cleardevice(); |
rectangle(100,100,400,400); |
if (clip(-dx,x1-xl,&u1,&u2)) |
if (clip(dx,xr-x1,&u1,&u2)) |
{ |
dy=y2-y1; |
if (clip(-dy,y1-yb,&u1,&u2)) |
if (clip(dy,yt-y1,&u1,&u2)) |
{ |
if (u2<1.0) |
{ |
x2=x1+u2*dx;y2=y1+u2*dy; |
} |
if (u1>0.0) |
{ |
x1+=u1*dx;y1+=u1*dy; |
} |
setcolor(2); |
line(x1,y1,x2,y2); |
getch(); |
|
} |
getch(); |
} closegraph(); |
} |
by: 发表于:2017-08-10 09:25:45 顶(0) | 踩(0) 回复
??
回复评论