计算机图形学-图形变换与裁剪-二维线段裁剪
计算机图形学-二维图形变换与裁剪ppt课件
基本几何变换——比例变换
比例变换是指对P点相对于坐标原点沿x方向放 缩Sx倍,沿y方向放缩Sy倍。 其中Sx和Sy称为比例系数。
Y
P'(4,3) P(2,1)
X
比例变换(Sx=2,Sy=3)
以坐标原点为缩放参照点 不仅改变了物体的大小和形状,也改变了位置(离原点的距离 )
19
基本几何变换——比例变换
21
基本几何变换——旋转变换
二维旋转是指将p点绕坐标原点转动某个角度 (逆时针为正,顺时针为负)得到新的点p’ 的重定位过程。
P' r θ r
α
图 旋转变换
22
Y
P X
基本几何变换——旋转变换
ቤተ መጻሕፍቲ ባይዱ
P' r P X
推导: α x r cos y r sin 极坐标: 逆时针旋转θ 角
P P T
27
规范化齐次坐标——平移变换矩阵
平移:
x 'y ' x y T xT y
1 0 0 x' y' 1x y 1 0 1 0 T T 1 x y
28
规范化齐次坐标——比例变换矩阵
比例:
S 0 x x ' y ' x y 0 S y
16
基本几何变换——平移变换
平移 将P点从一个坐标位置 移到另一个坐标位置的 重定位过程。
T P Tx
P' Ty
Y
X
图 平移变换
17
基本几何变换——平移变换
推导:
x' x Tx y ' y Ty
计算机图形学二维图形的裁剪
垂直并指向屏幕里面,即右手坐标系中Z轴的负方向。 反过来,如果P在该边界线的左边(即外侧),这时AB×AP的方向与X-
Y平面垂直并指向屏幕外面,即右手坐标系中Z轴的正方向。 设:点P(x,y)、点A(xA,yA)、点B(xB,yB), 向量AB={(xB-xA),(yB-yA)}, 向量AP={(x-xA),(y-yA)}, 那么AB×AP的方向可由下式的符号来确定:
依次下去,相对于第三条、第四条边界线进行裁剪,最后输出的多边 形顶点序列即为所求的裁剪好了的多边形。如下图所示。
7.3.1 Sutherland-Hodgeman多边形裁剪
新的多边形顶点序列产生规则: 在用窗口一条边界及其延长线裁剪一个多边形时,该边界线把平面分
成两个部分:一部分称为边界内侧;另一部分称为边界外侧。 如下图所示,依序考虑多边形的各条边。假设当前处理的多边形的边为
V=(xB-xA)·(y-yA)-(x-xA)·(yB-yA)
(3-14)
因此,当V≤0时,P在边界线内侧; 而V>0时,P在边界线外侧。
练习
Sutherland-Hodgeman多边形裁剪中,常用向量叉积法来测试当前点P是 否在边界内侧。已知窗口边界A(30,100)、B(40,180),某点P(50, 300),请 问点P在边界内侧吗?
7.3 多边形的裁剪
多边形裁剪的常用算法 1.Sutherland-Hodgeman多边形裁剪 2.Weiler-Atherton任意多边形裁剪
7.3.1 Sutherland-Hodgeman多边形裁剪
Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德 (I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。这种算法采用了 分割处理、逐边裁剪的方法。 一、Sutherland-Hodgeman多边形裁剪算法思想:
计算机图形学第6章二维图形的裁剪
• 重点:掌握二维图形点、线段、多边形和字符的裁剪算法 。
• 难点:理解二维图形的裁剪算法思想并且用C语言进行算法 的实现。
一、裁剪的意义 为了描述图形对象,我们必须存储它的全部信息,但有时为了达到分 区描述或重点描述某一部分的目的,往往将要描述的部分置于一个窗口内, 而将窗口外的部分“剪掉”,这个处理过程叫做裁剪,裁剪在计算机图形 处理中具有十分重要的意义。 裁剪实质上是从数据集合中抽取信息的过程,这个过程是通过一定的 计算方法来实现。
7.2.2 中点分割算法
二、中点分割算法实现: 1、将直线的两端点P1、P2编码得:C1、C2; 2、判别 根据C1和C2的具体值,可以有三种情况: (1)C1=C2=0,表明两端点全在窗口内,因而整个线段也在窗内, 应予保留。 (2)C1&C2≠0(两端点代码按位作逻辑乘不为0),即C1和C2至少 有某一位同时为1,表明两端点必定处于某一边界的同一外侧,因而整个线 段全在窗外,应予舍弃。 (3)不属于上面两种情况,均需要求交点。
如果上面四个不等式中任何一个不满足,则点(x,y)位于窗口之 外。 对于任意多边形窗口,需要根据多边形内点的判别准则进行判断。
7.2 线段的裁剪
直线段的裁剪比点复杂,其裁剪方法又是多边形裁剪和三维图形裁剪的 基础。 一、直线裁剪的基本思想 判断直线与窗口的位置关系: 1.确定直线是完全可见; 2.部分可见; 3.还是完全不可见。 对部分可见线段,求出它与窗口边界的交点,并将窗口内的线段输出。
一、中点分割算法思想: 1、中点公式
7.2.2 中点分割算法
2、中点分割法求交点的规则 如图中所示,当线段P1P2求出中点P后,舍弃线段的哪部分,由下面 两条规则决定:
中点分割法求交点规则
计算机图形学中的二维裁剪算法研究
计算机图形学中的二维裁剪算法研究计算机图形学研究的是如何在计算机上制图,根据研究对象的不同又分为二维图形学和三维图形学。
二维图形学研究的范畴是点,线,面。
本文就是介绍计算机图形学中的众多基本算法之一的二维剪裁算法。
在二维剪裁算法中,椭圆形窗口线剪裁算法又是应用最为广泛的算法之一,所以将是本文重点论述的对象。
标签:计算机图形学;二维剪裁算法;椭圆形窗口线剪裁算法计算机图形学中的基本算法对于计算机图形学应用于实践有着重要的作用,而且算法需要时时更新才能够发挥出计算机图形学在实践中的作用。
本文对计算机二维剪裁算法进行介绍,并对其中的椭圆窗口线剪裁算法进行着重的研究分析,探讨如何使该算法更加的稳定高效,方便易行。
算法可以指导人们的工作与生活,所以笔者在本文通过坐标分析设计出一个算法以供读者参考。
1 二维剪裁算法的基本介绍剪裁算法是计算机图形学中的基础算法之一。
剪裁在日常生活和工作中的应用十分广泛,最典型的一个应用就是对整体场景中的局部目的物进行剪裁。
剪裁的过程其实就是将场景中的目的物标记圈出来,一般为矩形窗口框圈出。
矩形窗口框为闪动的虚线框,可以根据剪裁的目的物大小随意变换矩形框的大小。
此外具体说来,剪裁算法还有其他的形式。
如:点剪裁,线段剪裁,多边形剪裁,曲线及文字剪裁等。
现在笔者再详细介绍二维剪裁算法。
二维剪裁算法分为两种,一种是对线段的剪裁,一种是对多边形的剪裁。
因为线段和多边形往往是二维平面中的图形,故而使用二维剪裁算法对其进行剪裁。
目前对该领域的研究已经取得了很丰硕的成果,已经有很多成熟也高效实用的二维剪裁算法。
详细地来说,这些经典的算法有Cyrus—berk二维剪裁算法,Cohen—Sutherland二维多边形剪裁算法等等。
2 椭圆形窗口线剪裁算法的简介在计算机图形学中,椭圆形窗口线剪裁算法是十分重要的一种基础算法。
该算法之所以十分重要,笔者总结为两点原因:首先椭圆形是几何图形中最基础的图形之一,其次在我们的日常生活和工作当中有很多地方的剪裁工作是更适合椭圆形的(我们生活与工作之中,很少有标准的圆形目的物去剪裁,更多情况下是不规则的图像剪裁,而椭圆形可以更好的,更多的剪裁出合适的目的物)。
二维线裁剪主要方法
二维线裁剪主要方法在计算机图形学领域,二维线裁剪是一项重要的技术,它被广泛应用于计算机图形学、计算机辅助设计和游戏开发等方面。
二维线裁剪的主要任务是通过对线段进行裁剪,将不在指定区域内的线段部分删除,从而实现对图形的简化和优化。
在本文中,将介绍二维线裁剪的主要方法,包括Cohen-Sutherland算法、Liang-Barsky算法和梁友栋-差值判断算法,通过对这些方法的介绍,读者可以更加全面地了解二维线裁剪的原理和实现。
Cohen-Sutherland算法Cohen-Sutherland算法是一种用于二维线裁剪的经典算法,它将裁剪区域划分为九个部分,分别对应于裁剪区域的内部、上下左右和四个角落。
在进行裁剪时,首先对线段进行编码,然后根据编码结果和裁剪区域的编码进行比较,通过判断编码结果的变化来确定线段是否在裁剪区域内,如果线段完全在裁剪区域内,则保留整条线段;如果线段完全在裁剪区域外,则删除整条线段;如果线段跨越裁剪区域边界,则对线段进行裁剪,得到部分在裁剪区域内的线段。
Liang-Barsky算法Liang-Barsky算法是另一种常用的二维线裁剪算法,它通过参数化的方式对线段进行裁剪。
算法首先计算线段与裁剪区域边界的交点,并根据线段在裁剪区域内的参数化表示来确定线段的裁剪结果。
通过参数化的方式,Liang-Barsky算法能够高效地计算出线段与裁剪区域的交点,并对线段进行裁剪,从而实现对线段的快速剪裁。
梁友栋-差值判断算法梁友栋-差值判断算法是一种基于差值判断的二维线裁剪算法,它通过计算线段与裁剪区域边界的差值来判断线段的裁剪结果。
算法首先计算线段与裁剪区域的交点,并根据线段在裁剪区域内的差值来确定线段的裁剪结果。
通过差值判断的方式,梁友栋-差值判断算法能够高效地计算出线段与裁剪区域的交点,并对线段进行裁剪,从而实现对线段的快速剪裁。
总结以上介绍了三种常用的二维线裁剪算法,它们分别是Cohen-Sutherland算法、Liang-Barsky算法和梁友栋-差值判断算法。
计算机图形学之裁剪算法
窗口特别小的场合。
2、中点裁剪法
中点分割裁剪法是将Cohen-Sutherland 算法中求线段与窗口边界的交点的过程用折 半查找(即求中点)的方法来代替。仍然采 用对线段端点进行编码的方式判断完全可见 和显然完全不可见的线段,对于与窗口有交 点的线段,该算法分别求离两个端点最近 (或最远)的可见点。这两个可见点之间的 线段即是原线段的可见部分。
计算P1P2的最近可见点Pma和 Pmb : (一)直线段P1P2的一个端点可见, P1 另一个端点不可见。 只需解算不可见端点的最近的 可见点。 1)设P1不可见,计算P1P2的中点Pm1。
P1
pm
P2
P2
判断中点Pm1如果落在(接近)窗口边上,则 确定该中点为最近可见点。裁剪结束。否则,
2)判断Pm1是否可见: 如果Pm1可见,以Pm1取代P2 ,返回到 1)计算 P1Pm1的中点Pm2,判断Pm2 如果Pm1不可见,以Pm1取代P1 ,返回到 1)计 算Pm1P2的中点Pm2,判断Pm2
关键: 根据多边形的边表,逐 次对每一段边与裁剪线 (窗口边直线)比较,判 别输入顶点的个数和坐 标,并联结成封闭多边 形。
不可见侧
2
多边形边与裁剪线相对位置的四种
情况与处理方法: (1) 位于可见一侧:输出终点作 为新多边形顶点 (2) 位于不可见一侧:不输出 (3) 由可见到不可见:输出与裁剪
P2
两种线段裁剪算法的比较
Cohen-Sutherland算法是最早的、使用最广泛的线
段裁剪算法之一。在裁剪窗口很大,大部分线段完全
可见,或裁剪窗口很小,大部分线段完全不可见的情 况下,该算法特别有效;在一般情况下,该算法有时 要做不必要的求交运算,因而效率不是太高.
计算机图形学 二维裁剪算法Cohen_Sutherland的实现
实验六二维裁剪算法Cohen_Sutherland的实现一、实验目的:理解并掌握直线裁剪算法。
使用Visual C++实现二维直线的裁剪的Cohen_Sutherland算法。
对窗口进行编码,并实现相应的裁剪函数。
二、实验内容及要求:1、要求用消息映射的方式,绘制出一个裁剪窗口,大小为200×150象素;2、按照例程的步骤画出3条典型线段,分别对应于完全在裁剪窗口内、完全在裁剪窗口外、穿过裁剪窗口三种情况,并按照本实验例程的方法用颜色分别表示出裁剪后的情况;3、按要求撰写实验报告,写出实验心得,并在实验报告中附上程序的核心算法代码。
三、实验设备:微机,Visual C++6.0四、实验内容及步骤:1、打开VC,新建一个MFC Appwizard项目,选择创建单文档工程(SDI工程)。
假设工程名为Clip。
如图1和图2所示。
图1图22、在图2的界面上点击Finish,完成工程的创建。
3、在视图类ClipView中定义变量CRect rect; 用于记录裁剪窗口的位置;4、在ClipView.cpp文件中定义四个宏,记录裁剪窗口的上下左右四个位置:#define LEFT 100#define RIGHT 300#define TOP 150#define BOTTOM 3105、在视图类的构造函数中为rect赋值;CClipView::CClipView(){// TODO: add construction code hererect = CRect(LEFT, TOP, RIGHT, BOTTOM);}6、在视图类(类CFillView中)的OnDraw()函数中绘制裁剪矩形,OnDraw函数的代码如下:void CClipView::OnDraw(CDC* pDC){CClipDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data herepDC->Rectangle(&rect);}7、在视图类(类CFillView中)添加成员函数int Encode(int x, int y),该函数用于对线段的两个顶点进行Cohen_Sutherland编码。
计算机图形学的裁剪算法
计算机图形学的裁剪算法
计算机图形学的裁剪算法是图形学的一种重要算法,它的基本思想是将一个完整的几何图形(如线段、多边形、圆圈等)按照指定的裁剪窗口(矩形)进行裁剪,只保留在窗口内的部分,而把窗口外的部分抛弃掉。
由于裁剪算法的应用非常广泛,像图形显示系统、图形设备接口(GDI)和图形处理器(GPU)等都广泛使用裁剪算法。
计算机图形学的裁剪算法可以分为两种:2D裁剪算法和
3D裁剪算法。
2D裁剪算法是基于二维空间的,它将一个几何
图形投影到一个平面上,然后按照指定的窗口裁剪;而3D裁
剪算法是基于三维空间的,它将一个几何图形投影到一个三维空间,然后按照指定的窗口裁剪。
2D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到平面上;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。
3D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到三维空间;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。
计算机图形学的裁剪算法在图形处理中有着重要的作用,它不仅能够有效减少图形处理时间,而且还可以节约存储空间。
此外,它还可以有效提高图形处理效率,提高图形显示效果。
但是,它也存在着一定的局限性,比如,当几何图形的运动变得复杂时,它就会变得费时费力,这就对性能产生了一定的影响。
总之,计算机图形学的裁剪算法是图形学的重要算法,它的应用非常广泛,在图形处理中有着重要的作用。
虽然它也存在着一定的局限性,但是它仍然是一种有效的图形处理算法。
计算机图形学-第三章-变换及裁剪
内容
二维变换 三维变换 裁剪
内容
二维变换
齐次坐标表示 基本变换 其它变换
三维变换 裁剪
二维变换
通过二维变换和裁剪,将定义在二维世界 坐标系中的物体变换到以像素为单位的屏 幕坐标系中,实现二维物体的光栅显示
矢量图形、卡通动画
二维图形中常见的变换
齐次坐标表示: 基本变换:平移、旋转、放缩 其它变换:剪切、对称、复合
齐次坐标
所谓齐次坐标表示法就是由n+1维向量表示一个
n 维 向 量 。 如 n 维 向 量 (P1,P2, … ,Pn) 表 示 为
(hP1,hP2, hPn,h),其中h称为哑坐标。
齐次坐标
1、h可以取不同的值,所以同一点的齐次坐标
不是唯一的。如普通坐标系下的点(2,3)变换 为齐次坐标可以是(1,1.5,0.5)(4,6,2)(6,9,3) 等等。
y
0
1
0
y
1 0 0 1 1
关于坐标原点的对称变换
x 1 0 0 x
y
0
1
0
y
1 0 0 1 1
关于X轴的对称变换
x 1 0 0 x
y
0
1
0
y
1 0 0 1 1
关于Y轴的对称变换
对称变换
Y (x,y) O
y=x X
(y,x)
x 0 1 0 x
Y (x',y')
(x,y)
O
X
x' 1 y'0
0 1
xyttxy
采用齐次坐标: (x, y) (x, y, 1)
x 1 0 tx x
y
计算机图形学-第三章-变换及裁剪
y
0
1
0 y
1 0 0 11
X
(1) 变换过程中, y坐标保持不变,而x坐标值发生线性变化;
(2) 平行于X轴的线段变换后仍平行于X轴,平行于Y轴的线段变换
后错切成与Y轴成固定角的直线
12
对称变换
Y
(-x,y) O
(-x,-y)
(x,y) X
(x,-y)
x 1 0 0 x
y
0
1 0 y
y (x,y)
y (x´,y´)
y
(x´´,y´´)
x
x
Tx
x
解:设点(x,y)为线段上的任意一点,点(x´,y´)为点(x,y)放大后 的坐标,点(x´´,y´´)为点(x´,y´)平移后的坐标,则: [x´ y´ 1]= [x y 1]S2(2,2) [x´´ y´´ 1]= [x´ y´ 1]T2(10,0) [x´´ y´´ 1]= [x´ y´ 1]T2(10,0)=[x y 1]S2(2,2)T2(10,0)
刚体 变换
仿射 变换
17
例1:复合平移
求点P(x,y)经第一次平移变换(Tx1,Ty1),第二次平 移变换(Tx2,Ty2)后的坐标P*(x*, y*)
解:设点P(x,y,1)经第一次平移变换后的坐标为P(x
y 1),则
1 0 0
P'x' y' 1x y 10 1 0x y 1Tt1
Tx1 Ty1 1
第三章 变换与裁剪
内容
二维变换 三维变换 裁剪
2
内容
二维变换
齐次坐标表示 基本变换 其它变换
三维变换 裁剪
3
二维变换
通过二维变换和裁剪,将定义在二维世界 坐标系中的物体变换到以像素为单位的屏 幕坐标系中,实现二维物体的光栅显示
计算机图形学中二维裁剪算法的研究
计算机图形学中二维裁剪算法的研究随着计算机技术的发展,计算机图形学也日益成熟。
在我们的日常生活中,也成了随处可见的必需部分。
在医学、娱乐、图形艺术、商业、教育培训、科学工程等众多领域,计算机图形学的应用非常普遍。
计算机图形学主要研究的是在计算机中构造图形,将用数学模型描述的图形数据采用合适的算法转换为屏幕上图形的显示。
计算机图形学学科研究的对象为二维图形学和三维图形学及其显示和变化情况。
点、线、面为二维图形学范畴,几何体和场等数学构造方法则为三维图形学范畴。
现在,计算机图形学的一些基本算法已经形成了固化在硬件中的规范软件包,这个学科也日趋成熟和完善。
但是依然有很多算法还需要不断的改进才能应用到实际中,而裁剪算法就是其中之一。
本文主要对二维图形裁剪中的椭圆形窗口裁剪算法进行了研究,使其具有较高的效率和稳定性。
标签:计算机图形学裁剪算法椭圆形窗口线裁剪算法1 裁剪概述裁剪算法,简称裁剪,是计算机图形学中很多重要问题的基础,它就是从数据集合中识别指定区域内或指定区域外图形部分的过程。
裁剪用途很广泛,最典型的就是确定场景中位于指定区域内的景物部分。
其中,指定区域成为裁剪窗口,一般为矩形,由四条边组成,上、下、左、右,即:(Xl,Yb),(Xr,Yt)。
实质上来说,裁剪就是确定哪些多边形等几何体位于裁剪窗口内。
对于点(X,Y),只要判断两对不等式:Xl≤X≤Xr,Yb≤Y≤Yt即可。
如果四个点坐标的不等式都不成立,则这个点在矩形窗口外,否则,在窗口内。
有一种最简单的裁剪方法,就是将所有图形扫描转换成点,然后在进行判断。
但是这种方法时间消耗太大,非常不可取。
倘若将全部在窗口外的图形完全排除而不进行扫描转换,则时间上面可以高效很多,故一般采用先裁剪再扫描的方法。
按裁减对象来分,裁剪算法大概分为如下几种:点裁剪、直线段裁剪、区域多边形裁剪、曲线裁剪和文字裁剪。
裁剪有多方面应用,主要包括:使用实体造型创建对象、在三维视图中标示出可见面、对图形的一部分进行删除、复制或移动操作、防止图形边界混淆、从特定场景中抽取指定部分等。
计算机图形学基础教程(Visual C++版)第05章 二维图形变换与裁剪(清华大学出版社 孔令德)
y
5-19 设备坐标系
图形学中常用的坐标系
规格化设备坐标系(Normalized Device Coordinate,NDC) 将设备坐标系规格化到(0.0,0.0)到(1.0,1.0)的 范围内而定义的坐标系。 规格化设备坐标系独立于具体输出设备。 一旦图形变换到规格化设备坐标系中,只要作一个简 单的乘法运算即可映射到具体的设备坐标系中。
wyt (xw,yw) 0000 wyb
vyt (xv,yv) 0000 vyb
wxl
wxr
vxl
已知窗口内的一点P的坐标(xw,yw),求视区中 对应点P’的坐标(xv,yv) 这属于相对于任一参考点的二维几何变换
vxr
变换步骤为:
1.将窗口左下角点(wxl,wyb)平移到观察坐标系 原点
写成方程为:
xv S x xw vxl wxl S x yv S y yw vyb wyb S y
则窗视变换的展开式为:
令
xv a x w b yv c y w d
裁剪
图形变换到观察坐标系下,需要按照窗口进行 裁剪,即只保留窗口内的那部分图形,去掉窗 口外的图形 假设窗口是标准矩形,即边与坐标轴平行的矩 形,由 上(y=wyt)、 下(y=wyb)、 左(x=wxl)、 右(x=wxr) 四条边描述
30
裁剪——点的裁剪
点是构成图形的基本元素 点的裁剪:
wxl x wxr, 且wyb y wyt
把图形全部打散成点进行裁剪?
31
二维直线段的裁剪
直线的裁剪是二维图形裁剪的基础 裁剪的实质是判断直线是否与窗口相交,如相 交则进一步确定位于窗口内的部分
计算机图形学 实验四 二维图形的裁剪
西北农林科技大学实习报告学院名称:理学院专业班级:姓名:学号:课程:计算机图形学实验报告日期:第十五周实验四二维图形的裁剪一、实验目的1)加深直线段的剪裁算法的理解。
2)熟练掌握一种裁剪算法的编程方法。
二、实验步骤1)分析直线段和矩形窗口的位置关系,选定比较合理算法流程。
2)画出程序流程图。
3)编写程序的源程序。
4)编辑源程序并进行调试。
5)进行特殊模式的运行测试,并结合情况进行调整。
三、实验内容1)在编码算法、中点分割算法、Liang-Barsky算法三种中任选一种作为编程模型。
2)编写直线段裁剪的源程序。
3)建议有能力的学生编写多边形裁剪程序。
4)在计算机上编辑编译运行,实现直线段的裁剪。
原理1.直线和窗口的关系:直线和窗口的关系可以分为如下3类:(1)整条直线在窗口内。
此时,不需剪裁,显示整条直线。
(2)整条直线在窗口外,此时,不需剪裁,不显示整条直线。
(3)部分直线在窗口内,部分直线在窗口外。
此时,需要求出直线与窗框的交点,并将窗口外的直线部分剪裁掉,显示窗口内的直线部分。
直线剪裁算法有两个主要步骤。
首先将不需剪裁的直线挑出,即删去在窗外的直线。
然后,对其余直线,逐条与窗框求交点,并将窗口外的部分删去。
2.Cohen-Sutherland直线剪裁算法:(1)输入直线段的两端点坐标p1(x1,y1),p2(x2,y2),以及窗口的4条边界坐标,y wt ,y wb,y wl,y wr.(2)对p1,p2进行编码,点p1的编码为code1,点p2的编码为code2.(3)若code1| code2=0,对直线p1p2“简取”之,转(6);否则,若code1& code2≠0,对直线段“简弃”之,转(7);当上述两条均不满足时,进行步骤(4)。
(4)确保p1在窗口外部。
若p1在窗口内,则交换p1和p2的坐标值和编码。
(5)根据p1编码从低位开始寻找值为1的地方,从而确定p1在窗口外的哪一侧,然后求出直线段与相应窗口边界的交点S,并用交点S的坐标值替换p1的坐标值,即在交点S处把线段一分为二,因此可以去掉p1S。
计算机图形学实用教程第5章 图形变换与裁剪1
(x w , y w)
yb
yv
Ow Yu
W xl 视图区
W xr
Xw
令பைடு நூலகம்
V yt
(x v , y v)
V yb
有
xv axw c
yv byw d
Ou
V xl
V xr
Xu
窗口与视图区的对应关系
本章内容
5.基本几何变换的齐次坐标表示
平移变换
1 y 1 0 Tx 0 1 Ty 0 0 1
x
比例变换
y 1 x
x
旋转变换
逆时针为正
y 1 x
S x y 1 0 0
0 Sy 0
0 0 1
x
y 1 x
cos sin 0 y 1 sin cos 0 0 1 0
当 S x S y时,变换前的图形与变换后的图形相似 当 S x S y 1时,图形将放大,并远离坐标原点 当 0 S x S y 1 时,图形将缩小,并靠近坐标原点 当 S x S y时,图形将发生畸变
3.旋转变换(rotation) 点P绕原点逆时针转θ度角 (设逆时针旋转方向为正方向)
指相对于原点的比例变换
S x 平行于x轴的方向上的缩放量 S y 平行于y轴的方向上的缩放量
x
y
几何关系
x' x S x y' y S y
y
相对于原点的比例变换
重心
矩阵形式
x
y x
S x y 0
0 Sy
图形学实验报告--线段裁剪
计算机科学与技术学院2013-2014学年第一学期《计算机图形学》实验报告班级:110341B班学号:110341228姓名:王陈教师:惠康华成绩:实验项目: 二维裁剪一、实验目的与要求(1)掌握线段裁剪算法原理,并实现其算法。
(2)理解多边形裁剪、字符裁剪算法思想,能编程实现其算法。
二、实验内容(1)实现直线段的标号法、矩形窗口裁剪算法。
(2)参考教材中的算法,用矩形窗口实现多边形的裁剪算法。
三、重要算法分析(一)线段裁剪Cohen-Sutherland算法实验原理:1、线段裁剪生成算法:对于矩形的窗口,任何直线至多只有一段处于该窗口之内,即在此窗口范围内永远不会产生一条直线的两条或更多的可见部分线段。
该算法的基本思想为:对于每条待裁剪的线段分完全在窗口内(此时不需要裁剪,全部显示)、完全在窗口外(此时不需要裁剪,整条线段不显示)、部分在窗口内部分在窗口外三种情况讨论。
将窗口及其周围的八个方向以四位的二进制数进行编码,用来快速判断一条直线段与窗口属于何种关系。
其中全为0的区域为裁剪窗口。
(1) 判断线段两个端点的四位二进制编码,如果全为0,即两端点编码逻辑或运算为0,那么该线段完全位于窗口内,可直接保留;(2) 对两端点的四位二进制编码进行逻辑与运算,若结果不为0,那么整条线段必位于窗口外,可直接舍弃。
(3) 如果以上两种情况皆不是,则这条线段既不能直接保留,也不能直接舍弃,它可能与窗口相交。
此时,需要对线段进行再分割,即找到与窗口边线的一个交点,根据交点位置,赋予四位二进制编码,并对分割后的线段按照一定的顺序(左右下上)进行检查,决定保留、舍弃或再次进行分割。
(4) 重复第三步,直到出现正确的裁剪结果为止。
四、实验结果截图裁剪线段1、双击击鼠标左键,出现要裁剪的线段:如图3-1图3-1 生成裁剪窗口和待裁剪线段2、裁剪后的结果:如图3-2图3-2 裁剪后的结果五、总结与调试经验1、程序初期的结构搭建很重要:在VC中选择MFC APPWizard(exe),建立单文档应用程序,编辑菜单资源,重置ID,添加消息处理函数,建立类向导,最后添加程序代码。
二维变换和裁剪
5.2 二维图形基本几何变换矩阵
5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 平移变换矩阵 比例变换矩阵 旋转变换矩阵 反射变换矩阵 错切变换矩阵
5.2 二维图形基本几何变换矩阵
二维图形基本几何变换是指相对于坐标原 点和坐标轴进行的几何变换,包括平移、比例、
旋转、反射和错切五种变换。本节以点的二维
x ' x Tx y' y Ty
P’
P
Tx
1 2 3 4 5
Ty
O
6
x
图5.1 平移变换
相应的齐次坐标矩阵表示为:
x'
y ' 1 x Tx
y T y 1 x
1 y 1 0 Tx
0 1 Ty
0 0 1
因此,二维平移变换矩阵为:
p q s
则二维几何变换公式为,可以写成:
x'1 x' 2 x' n 1 x1 y1 1 x a b y'2 1 2 y 2 1 c d l m y' n 1 xn y n 1 y '1 p q s
a11b13 a12b23 a13b33 a 21b13 a 22b23 a 23b33 (5-1) a n1b13 a n 2 b23 a n3b33
由线性代数知道,矩阵乘法不满足交换律,只有左矩 阵的列数等于右矩阵的行数时,两个矩阵才可以相乘。 特别地,对于二维变换的两个3×3的方阵A和B,矩阵 相乘公式为:
a11b11 a12b21 a13b31 a11b12 a12b22 a13b32 a b a b a b a 21b12 a 22b22 a 23b32 21 11 22 21 23 31 a n1b11 a n 2 b21 a n3b31 a n1b12 a n 2 b22 a n3b32
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示方向收集顶点序列。 v 如此交替沿两个多边形的边行进。直至回到
跟踪的起始点为止。
38
Weiler-Atherton算法-6/7
S2
C2
I2
I3
主多边形表
裁剪多边形CP
S1
C3
开始 I1
I2
I1
S3
I4
S4
S2 I3
U
S
ymin P1
A
T
L
R
xmin
P2 xmax
ymax P4
P3
B
U
S
ymin P1
A
P2
T
L xmiRn
xmax
22
1.直线段裁剪(16/18)
v 当Q为空集时,线段AB不可能在窗口中有可见线段。 v 当Q不为空集时,Q可看成是一个一维窗口。
v 存在可见线段的充要条件
即
不为空集 。
ymax P4
为提高效率,该算法强调: l 快速判断情形(1)(2); l 减少情形(3)的求交次数和求交所需的计算量。
11
1.直线段裁剪(8/18)
Cohen-Sutherland 算法
算法步骤:
1. 判别线段两端点是否都落在窗口内,如果是,则线 段完全可见,转至第4步;
2. 判别线段是否为显然不可见,如果是,则裁剪结束, 转至第4步 ;
C1 C2 C3 II45 C4 I8 I1 结束 C1 C5 I2
I7 C6 I6 I3 结束
C7
C8 C5
40
v 分割处理策略:
将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所 在直线的裁剪。
v 流水线过程(左上右下):左边的结果是右边的开始。
亦称逐边裁剪算法
30
Sutherland-Hodgman算法-2/4
内侧空间与外侧空间 多边形的边与半空间的关系
当前裁剪边
当前裁剪边
当前裁剪边
当前裁剪边
可见一侧 Pi+1
第五章 图形变换与裁剪(三) 5.5 二维线段裁剪
1
5.5 二维线段裁剪
1 直线段裁剪
直接求交算法 Cohen-Sutherland算法 中点分割裁剪算法 梁友栋-Barsky算法
2 多边形裁剪
Sutherland_Hodgman算法 Weiler-Atherton算法
2
1.直线段裁剪(1/18)
6
1.直线段裁剪(5/18)
v 待裁剪线段和窗口的关系
1. 完全落在窗口内, 2. 完全落在窗口外, 3. 部分在内,部分在外.
7
5.5 二维线段裁剪
1 直线段裁剪
直接求交算法 Cohen-Sutherland算法 中点分割裁剪算法 梁友栋-Barsky算法
8
1.直线段裁剪(6/18)
34
Weiler-Atherton算法-2/7
v 约定:
SP与CP均用它们顶点的环形链表定义
外边界取顺时针方向 内边界取逆时针方向 使得沿多边形的边走动,
其右边为多边形的内部。
C2 C8
C5
I2
I7
C1
I1
I8
C3
C7
I3
I4
I6
I5
C6
C4
35
Weiler-Atherton算法-3/7
由窗口四条边所在直线把二维平面分成9个区域,每个 区域赋予一个四位编码,CtCbCrCl,上下右左;
1 0 01 1 0 0 0 0 0 01 00 0 0 01 01 0100
1 010 0 010 0110
13
1.直线段裁剪(10/18)
Cohen-Sutherland 算法
v 所以也称为编码裁剪算法
5
9
6
4
原图
98
对顶 4
5
对左 10
边裁 10
边裁 1
8
7
1
7
6
32
32
Demo
98 4
10
1
7
3
2
对右 边裁
5
对底 4 9 8
5
边裁 10
6
1
7
6
3
2
33 图6 逐边裁剪法对凹多边形裁剪时可能出现的问题
Weiler-Atherton算法-1/7
裁剪窗口为任意多边形(凸、凹、带内环)的情况:
主多边形:被裁剪多边形,记为SP 裁剪多边形:裁剪窗口,记为CP
v 端点编码:
定义为它所在区域的 编码
v 快速判断“完全不可见” 线段两端点编码的逻 辑“与”运算结果非零 , 则完全不可见。
14
1.直线段裁剪(11/18)
Cohen-Sutherland 算法
对于那些部分可见又部分不可见的线段,需要 求交,求交前先测试与窗口哪条边所在直线有交?
Ø 逐个端点判断其编码 ClCtCrCb中各位是否为“1”, 若是,则需求交。
26
2.多边形裁剪(Ploygon clipping)-1/3
v 错觉:多边形裁剪是直线段裁剪的组合?
v 新的问题:
A B
A B
图1 因丢失顶点信息而去法确定裁剪区域
图2 原来封闭的多边形变成了孤立的线段
边界不再封闭,需要用窗口边界的恰当部分来封闭它
27
2.多边形裁剪-2/3
分裂为几个多边形
3
1
可见一侧
可见一侧
可见一侧
Pi
Pi+1
Pi I
Pi
Pi+1
Pi+1
Pi
I
窗口
(a) 输出Pi+1
窗口
(a) 无输出
窗口
(a) 输出I
窗口
(a) 输出I和Pi+1
线段与当前裁剪边的位置关系
31
Sutherland-Hodgman算法-3/4
v 裁剪结果的顶点构成:
裁剪边内侧的原顶点; 多边形的边与裁剪边的交点。
左端点的最大值,右端点的最小值
L
R xmin
xmax
AS是一维窗口TS中的可见部分
v 向x轴投影,得到可见线段端点的 x 坐标变化范围
左端点x坐标
右端点x坐标
y坐标可由将x坐标代入直线方程计算得到
24
1.直线段裁剪(18/18)
Liang-Barsky裁剪算法
v AB有可见部分的充要条件也可表示为
Ø 最坏情形: 线段求交四次。
15
1.直线段裁剪(12/18)
Cohen-Sutherland 算法
1)特点: 用编码方法可快速判断线段-—— 完全可见 或 完全不可见。
2)特别适用两种场合: ① 大窗口场合; ② 窗口特别小的场合
(如:光标拾取图形时,光标看作小的裁剪窗口)
16
5.5 二维线段裁剪
3. 求线段与窗口边延长线的交点,这个交点将线段分 为两段,其中一段显然不可见,丢弃。对余下的另 一段重新进行第1步处理,
4. 结束 裁剪过程是递归的。
12
1.直线段裁剪(9/18)
Cohen-Sutherland 算法
v 关键问题:
如何快速判别 完全可见 和 完全不可见 线段?
v 解决方法 —— 编码:
P3
B
U
S
ymax P4
P3
B
U
S
ymin P1
A
T
P2
ymin P1
A
P2
T
L
R
xmin
xmax
L
R
xmin
xmax
23
1.直线段裁剪(17/18)
Liang-Barsky裁剪算法
ymax P4
U
R
P3
B
U
S
v
RS,AB,
TU三条线段的交集的端点坐标 ymin
P1
v 等价于求三条线段的
A
P2
TT S
S3
S1
I4
I8 S6
I5
主多边形SP
S4 I5
I6
S5
C1
C4
I7
I6
S5
I7
S6 I8 S1
算法裁剪后所生成的多边形为I1I2I3S3I4I5I6I7S6I8 I1
裁剪多边形表
C1
I8
I1 结束 C2 I2 I3 I5 C3 I4 I5 C4 I6 I7 C1
39
Weiler-Atherton算法-7/7
效率高,速度快
4
1.直线段裁剪(3/18)
v 把直线当作点的集合,逐点裁剪 点 ( x, y ) 在窗口内的充分必要条件是:
问题:极其费时,精度不高。
5
1.直线段裁剪(4/18)
v 把直线当作一个整体来裁剪
矩形裁剪窗口:
[xmin,xmax] [ymin,ymax]
待裁剪线段:
v 前提:任何平面线段在凸多边形窗口进行 裁剪后,落在窗口内的线段不会多于1条。
C2
C3 裁剪多边形CP 主多边形表 裁剪多边形表
C8
S2
C7
S1
主多边形SP 开始 I1
I3
I4
I2
S3
S2
开始 I3
S8
I6
I5
S7
I4 S3
S4
C5
I2
I7
C6
S1 S5
S6
C1
I1
I8
C4
S7 I5