liangyoud.cpp

来自「实现直线裁剪」· C++ 代码 · 共 71 行

CPP
71
字号
  #include "graphics.h"
#include "stdio.h"
#include "conio.h"

int ClipT(float p,float q,float *u1,float *u2)
{
int flag=1;
float r;
if(p<0.0)
{
   r=q/p;
   if(r>*u2) flag=0;
   else if(r>*u1)
    *u1=r;
}
else if(p>0.0)
{
   r=q/p;
   if(r<*u1) flag=0;
   else if(r<*u2)
    *u2=r;
}
else if(q<0.0) flag=0;
return flag;
}

void LiangLine(int xwmin,int ywmin,int xwmax,int ywmax,int x1,int y1,int x2,int y2)
{
float dx,dy,u1,u2;
u1=0.0;u2=1.0;
dx=x2-x1;
if(ClipT(-dx,x1-xwmin,&u1,&u2))
        if(ClipT(dx,xwmax-x1,&u1,&u2))
{
   dy=y2-y1;
   if(ClipT(-dy,y1-ywmin,&u1,&u2))
     if(ClipT(dy,ywmax-y1,&u1,&u2))
      {
   if(u2<1.0)
   {
    x2=x1+u2*dx;
    y2=y1+u2*dy;
   }
   if(u1>0.0)
   {
    x1=x1+u1*dx;
    y1=y1+u1*dy;
   }
   line(x1,y1,x2,y2);
   getch();
     }
}
}

void main(void)
{
int XL,XR,YB,YT;
int x0,y0,x1,y1;
int gd=DETECT,gm=0;
initgraph(&gd,&gm,"");
cleardevice();
printf("Please input the rectangle point(XL,YT,XR,YB):\n");
scanf("%d%d%d%d",&XL,&YT,&XR,&YB);
setcolor(10);
rectangle(XL,YT,XR,YB);
getch();
printf("Please input the line node(x0,y0,x1,y1):\n");
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
LiangLine(XL,YT,XR,YB,x0,y0,x1,y1);
}

⌨️ 快捷键说明

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