裁剪算法
待补充
计算机图形学之裁剪
* 3D裁剪
* 2D裁剪
裁剪算法: 用来消除显示区域外的图形部分.
二维裁剪算法
* 点的裁剪
* 线段的裁剪(直线段)
* 区域裁剪(多变形裁剪)
二维点的裁剪
裁剪窗口为一个标准的矩形:
Xmin<=X<=Xmax
Ymin<=Y<=Ymax
二维线段的裁剪
- 线段与窗口边界的求交运算耗时.
- 因此.较少交点的计算是每一种线段裁剪算法的主要目标.
判断线段是否完全在平面内
- 线段的两个端点都在平面内.那么该线段就在平面内.
判断线段是否完全在平面外或者部分在平面外
- 要求交
Cohen-Sutherland线段裁剪算法
思想: 编码 将平面的四条边延长划分出9个区域.编码如上.
裁剪一条线段时,先求出端点p1和p2的编码code1和code2,然后进行二进制的“或”运算和“与”运算
- 若code1|code2=0,对直线段应简取之,说明该直线段在窗口内
- code1&code2 不等于 0,对直线可简弃之
- 若上述两条件均不成立,则需要求出直线段与窗口边界的交点,在交点处把线段一分为二
适用于:
- 大部分线段在窗口内. 和 大部分线段在窗口外.
存在的问题: - 最坏情况下,被裁剪线段与窗口4条边计算交点,然后所得的裁剪结果却可能是全部舍弃
代码实现:
https://blog.csdn.net/qq_32126633/article/details/78724987
梁-Barsky线段裁剪算法
待补充.
多边形裁剪
用直线裁剪法裁剪左边多边形,得到右边的图形
即得到一系列不连续的直线段!得到的结果是不正确的
而实际上,应该得到的是下图所示的右边界的区域:
多边形裁剪算法的输出应该是裁剪后的多边形边界的定点序列!
Sutherland-Hodgman算法
https://www.bbsmax.com/A/mo5kBYLJwR/
https://blog.csdn.net/damotiansheng/article/details/43274183
待补充.