用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...