图形学裁剪算法(一)Cohen-SutherLand裁剪算法(编码裁剪算法)

图形学裁剪算法(一)Cohen-SutherLand裁剪算法(编码裁剪算法)

算法原理

将线段分为以下三种情况处理
(1)若P1P2完全在窗口内,则显示该线段P1P2,–简取
(2)若P1P2完全在窗口外,则丢弃该线段。–简弃
(3)若线段不满足(1)(2)时,则把线段分为两段,其中一段完全在窗口外,再重复上述判断能否取或弃

编码

对于不同区域的点进行如下编码,假设窗口,左侧(XL)右侧(XR)上侧(YT)下侧(YB),
区域编码:对于点P(x,y) code=ABCD(二进制)
   x < XL D=1   x > XR   C=1
   y < YB B=1   y > YT    A=1
可获得该点对应得编码
如下图

在这里插入图片描述
对于之前得三种情况如下:
P1的编码 : code1       P2的编码 : code2
(1)完全在窗口内,则有 code1 | code2 = 0
(2)完全在窗口外,则有 code1 & code2 != 0
(3)与窗口相交,求交,将窗口外的线段丢弃,再进行裁剪

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

源码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值