计算机图形学(裁剪)

裁剪:从大的画面中抽取所需的信息,以显示局部。与裁剪对应的显示区,称为窗口。
最典型的用途:确定场景或画面中位于给定区域的部分,称为裁剪区域(二维:矩形,三维:视见体-四棱柱、四棱台)
一、二维空间的裁剪窗口:矩形
裁剪对象:点、线、多边形
1.对点的裁剪:对点在窗口内的包含检测
裁剪窗口为:Xmin<=x<=Xmax,Ymin<=y<=Ymax
点(x,y)在窗口内部的条件是:
在这里插入图片描述
2.对于直线的裁剪
(1)Cohen-Sutherland(编码)算法
在这里插入图片描述
分区和编码:
对于给定平面,平面中有四条直线(四条直线内部所围成的矩形是裁剪窗口)将该平面分为9个区域,用四位2进制数D1D2D3D4对这九个区域进行编码,D0标记裁剪窗口的左边界XL,D1标记裁剪窗口的右边界XR,D2标记裁剪窗口的下边界YB,D3标记裁剪窗口的上边界YT。
对于平面内一点(x,y),根据其坐标所在的区域,赋予一个4为的二进制码,编码规则:
在这里插入图片描述
根据直线两端点编码区分:取、弃、裁
当直线两端点的编码code1和code2都为0000,取之;
当直线两端点的编码code1和code2都不为0000,且code1与code2按位与结果不为0000,说明直线位于平面内四条直线的某一条直线的外侧,弃之;
例如:
在这里插入图片描述
当直线两端点的编码code1和code2都不为0000,且code1与code2按位与结果为0000或者一个端点的编码位0000、另一个端点编码不为0000,说明直线与裁剪窗口相交,裁之(需要求出直线与裁剪窗口边界线的交点,利用该交点作为直线段的新交点进行下一次的裁剪判断)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如下例:线段P1P2,P1、P2的编码code1,code2都不为0000,且code1与code2按位与结果为0,所以对线段采取的操作是裁之。裁剪线段是需考虑线段与窗体边界的交点(只需考虑code1与code2与窗体边界直线对应位不一致的情况)。例如,左边界对应D0,P1的D0位为1,P2的D0位为0,P1P2与直线有交点,交点为P3,求出P3后在对线段P3P2进行同样的操作(上边界对应位为D3,P1、P2的D3位都为0,P1P2与上边界没有交点,不需要求交点)。
在这里插入图片描述
在这里插入图片描述
(2)梁友栋-Barsky裁剪算法
将窗体边界直线中的左右边界直线、上下边界直线分为分为始边、终边:
在这里插入图片描述
将被裁剪线段的起点(P1)和其与两条始边的交点A,B分为一组,称为起始组,将被裁剪线段的终点(P2)和其与两条终边的交点C,D分为一组,称为终止组。
将直线用下图形式表示:
在这里插入图片描述
dx,dy为实数(dx=x2-x1,dy=y2-y1);t为参数,当参数t处于0~1时,表示(x1,y1)和(x2,y2)之间的线段,当t<0时,表示向P1外侧延伸的部分,当t>1时,表示向P2外侧延伸的部分。(起点P1的t值为0,终点P2的t值为1)
要找出A,B,P(起始组)与P2(终点)最近的点,只需找该三个点中t值最大的点,该点t值为t1;要找出C,D,P2(终止组)与P1(起点)最近的点,只需找该三个点中t值最小的点,该点t值为t2.
在这里插入图片描述
2.对多边形的裁剪
Sutherland-Hodgman算法(只适用于凸多边形,如果要作用于凹多边形,则应先将凹多边形分割成多个凸多边形在进行裁剪):分割处理、逐边裁剪的算法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值