裁剪算法——多边形裁剪/文字裁剪

五、多边形裁剪

多边形裁剪算法的输出应该是裁剪后的多边形边界的【定点序列】

5.1Sutherland—Hodgeman多边形裁剪——>【分而治之】
基本思想:
将多边形边界作为一个整体,每次用窗口的一条边对要裁剪的多边形和中间结果多边形进行裁剪。

把平面分为两个区域:包含有窗口区域的一个域称为可见侧;不包含窗口区域的域为不可见侧。
裁剪得到的结果多边形的顶点有两部分组成:
    (1)落在可见一侧的原多边形顶点;
    (2)多边形的边与裁剪窗口边界的交点。

根据多边形每一边与窗口所形成的位置关系,沿着多边形依次处理顶点会遇到四种情况:
(1)第一点S在不可见侧面,第二点P在可见侧面,则交点I与点P均被加入到输出顶点表中;

(2)第一点S和第二点P都在可见侧,则点P被加入到输出顶点表中;

(3)第一点S在可见侧,而第二点P在不可见侧,则交点I被加入到输出顶点表中;

(4)第一点S和第二点P都在不可见侧,则输出顶点表中不增加任何顶点

【不足之处】
Sutherland—Hodgeman算法对凸多边形进行裁剪可以获得正确的裁剪结果,但是对凹多边形进行裁剪的结果可能存在问题。

六、文字裁剪
文字裁剪包括:串精度裁剪/字符精度裁剪/笔画/象素精度裁剪
6.1串精度裁剪

当字符串中的【所有】字符都在裁剪窗口内时,就全部保留它,否则舍弃整个字符串。

6.2字符精度裁剪

在进行裁剪时,任何与窗口有【重叠或落在窗口边界以外】的字符都被裁剪掉

6.3笔画/象素精度裁剪

将笔划分解成直线段对窗口坐裁剪,需要判断字符串中各字符的哪些象素、笔画的【哪一部分】在窗口内,保留窗口内部分,裁剪掉窗口外的部分。

原文地址:https://www.cnblogs.com/Penglimei/p/9690418.html

时间: 2024-11-02 09:19:01

裁剪算法——多边形裁剪/文字裁剪的相关文章

多边形裁剪与文字裁剪

多边形裁剪 一. 若采用直线裁剪的方法裁剪多边形,则得到一系列不连续的直线段 应该得到这种图形: 多边形裁剪算法的输出应该是裁剪后的多边形边界的顶点序列! 二.SutherLand-Hodgeman多边形裁剪 1.基本思想是将多边形边界作为一个整体,每次用窗口的一条边对多边形进行裁剪,体现一种分而治之的思想. 2.裁剪得到的结果多边形的顶点有两部分组成: (1)落在可见一侧的原多边形顶点 (2)多边形的边与裁剪窗口边界的交点 3.不足之处 只能适用于凸多边形 文字裁剪 字符并不是由直线段组成的

CGA裁剪算法之Sutherland-Hodgman多边形裁剪算法

CGA裁剪算法之Sutherland-Hodgman多边形裁剪算法 Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德(I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的. 这种算法采用了分割处理.逐边裁剪的方法.这一算法,适合任何凸多边形窗口对任何“凸或者凹,或者平面或者非平面”多边形的裁剪处理. 逐边逐次裁剪特点:逐边是分别用裁剪平面的边界来处理,且裁剪各个边界的处理顺序无关紧要.逐次是每次的裁剪边界对多边形的每条边处理是依次进行的,有顺序要求.

Cyrus-Beck裁剪算法及OpenGL实践

恩..接着就是Cyrus-Beck算法.这个算法比之前的Cohen-Sutherland算法厉害,处理任意凸多边形对线段的裁剪.自然,这个算法也比Cohen-Sutherland算法复杂不少. 首先,是线段与多边形相交的情况: 我们把定义向量c = (C - A),而线段AC是射线A + ct的一部分.那么t取0和1就是线段AC.我们将射线与多边形的每条边求出相交时的t.取tin = max(0, tin),tout = max(tout, 1).最终会获得一个区间[tin,tout]就是经多边

[计算机图形学 with OpenGL] Chapter8 习题8.12 NLN二维线段裁剪算法实现

Nicholl-Lee-Nicholl二维线段裁剪算法相对于Cohen-Sutherland和Liang-Barsky算法来说,在求交点之前进行了线段端点相对于几个区域的判断,可以确切的知道要求交点的边的信息. 此方法只在二维空间裁剪时使用,C-S和L-B裁剪方法则可应用到三维空间. 算法步骤: 1 先使用C-S裁剪算法的区域码判断方法,去除一部分在裁剪区域外面的线段.显示在完全在裁剪区域内的线段.其他不能判断的情况,采用NLN算法进行裁剪. 2 p1和p2若有一点在区域内,必要时交换端点以确保

清华版CG 实验4 编码裁剪算法

1.实验目的: 了解二维图形裁剪的原理(点的裁剪.直线的裁剪.多边形的裁剪),利用VC+OpenGL实现直线的裁剪算法. 2.实验内容: (1) 理解直线裁剪的原理(Cohen-Surtherland算法.梁友栋算法) (2) 利用VC+OpenGL实现直线的编码裁剪算法,在屏幕上用一个封闭矩形裁剪任意一条直线. (3) 调试.编译.修改程序. (4) 尝试实现梁友栋裁剪算法. 3.实验原理: 编码裁剪算法中,为了快速判断一条直线段与矩形窗口的位置关系,采用了如图A.4所示的空间划分和编码方案.

Cohen Sutherland裁剪算法并使用OpenGL实践

还是其几天写的,这是最简单的一个直线裁剪算法了吧,它针对的是一个矩形和一条线段.并且还是边与坐标轴平行的矩形. 在实际应用上应该会经常用于屏幕对各种线段的裁剪吧.算法很简单效率也很高. 首先是算法的两种特例:平凡接受和平凡拒绝. (图片来自<计算机图形学(OpenGL)>第三版) 当线段的两个端点都在矩形内部,则平凡接受,不需要裁剪.如图中的AB.而当线段的两个端点都在某条边的外边时,平凡拒绝,也不需要裁剪.如图中的CD. 检测这两种情况的方法可以先形成两个端点的码字,如下: 那么可以得到如下

矩形裁剪算法_python3最终版

环境准备: Python版本是3.5.1.使用pip命令:pip install pyopengl 安装pyopengl模块 另外注意需要将opengl文件(打开文件链接,也可自行百度)复制到系统盘System32(32位系统)或SysWOW64(64位系统)目录下,不然可能或报错.我今天在学校实验室碰到了此问题,错误信息好像是glutInit函数不能使用之类的. 说明: 老师的要求是实现键盘输入和鼠标点击两种交互方式,没法子,只好封装一下函数,方便调用了. 代码: #encoding='utf

[图形学]Chapter 8.7.2 梁友栋-Barsky线段裁剪算法

这节简单介绍了梁友栋-Barsky裁剪算法的原理,只有结论并没有过程,看过http://blog.csdn.net/daisy__ben/article/details/51941608这篇文章后,大概有了新的认识. " 假设点P1P2W1W2的横坐标分别是x1,x2,w1,w2,线段P1P2与蓝色裁剪窗口W1W2(蓝色的线之间)的存在公共部分(可见部分)的充要条件是: max(min(x1,x2), min(w1,w2))≤ min(max(x1,x2), max(w1,w2)) 即所谓左端点

矩形裁剪算法_pyopengl

环境准备: Python版本是3.5.1.使用pip命令:pip install pyopengl 安装pyopengl模块. 图形学期末设计,不知道用opengl或webgl做什么炫酷的效果,只好做算法了,悲剧的写了500多行,缺点是裁剪算法未封装成函数. 代码如下: #encoding='utf-8' #python3.5.1 #author by 张政伟 2016/6/16 #矩形裁剪算法 from OpenGL.GLUT import * from OpenGL.GL import *