用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

单边型裁剪

2016-05-04 作者: 南侑举报

[c]代码库

#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();
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...