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

📄 liangyoud.cpp

📁 实现直线裁剪
💻 CPP
字号:
  #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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -