Cohen-Surtherland裁剪算法

#define LEFT   1
#define RIGHT  2
#define BOTTOM 4
#define TOP    8
#define XL     150
#define XR     350
#define YB     150
#define YT     300
#include <math.h>
#include "graphics.h"
main()
{ 
	int gdriver=DETECT,gmode;
	initgraph(&gdriver,&gmode," ");
	setcolor(12);
	line(XL,YT,XR,YT);
	line(XL,YB,XR,YB);
	line(XL,YT,XL,YB);
	line(XR,YT,XR,YB);
	setcolor(14);
	draw_ett();
	getch();
	closegraph();   
}

int encode (int x,int y)
{
	int  code;
	int c;
	c=0;
	if (x<XL) c=c|LEFT;
	else if (x>XR) c=c|RIGHT;
	if (y<YB) c=c|BOTTOM;
	else if (y>YT) c=c|TOP;
	code=c;
	return code;
}

draw_ett()
{   
	int x1,x2,y1,y2,x,y;
	int code1,code2,code;
	x1=50;y1=250;x2=400; y2=90;
	setcolor(2);
	line(x1,y1,x2,y2); 
	code1=encode(x1,y1);
	code2=encode(x2,y2);
	while ((code1!=0)||(code2!=0))
	{
		if ((code1&code2)!=0) 
			return;
		code=code1;
		if (code1==0) 
			code=code2;
		if ((LEFT&code)!=0)
		{
			x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1); 
		}
		else  if ((RIGHT&code)!=0)
		{
			x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);
		}
		else  if ((BOTTOM&code)!=0)
		{
			y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);
		}
		else  if ((TOP&code)!=0)
		{
			y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);
		}

		if (code==code1)
		{ 
			x1=x; y1=y;code1=encode(x,y); 
		}
		else
		{ 
			x2=x;y2=y;code2=encode(x,y);
		}
	}
	setcolor(14); 
	line(x1,y1,x2,y2);
	return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值