第3章 5 裁剪算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1991年梁友栋先生为首完成的成果“计算机图形生 成与几何造型研究”获国家自然科学三等奖;
九十年代后期,六十多岁的他积极开展纤维缠绕几何 设计的研究,为我国几何设计与计算机图形学的研究 做出了杰出贡献.
鉴于梁友栋先生的杰出贡献和成就,中国工业与应用 数学学会几何设计与计算专委会授予梁友栋先生第 二届“中国几何设计与计算贡献奖”。
线段p1(x1,y1)p2(x2,y2)的参数方程可以表示为:
x=x1+t△x y=y1+t△y 其中,△x=x2-x1, △y=y2-y1,0<=t<=1
P(x,y)代表了该线段上的一个点,其值由参数t确定。 由公式可知,当t=0时,该点为P1(x1,y1),当t=1时,该
点为P2(x2,y2)。 如果点P(x,y)位于由坐标(xmin,ymin)和(xmax,ymax)
② Pa=p1,pb=p2,得papb的中点pm,若pm可见,pm代替p1, 否则pm代替p2.
③ 如果papb的长度小于系统设定的一个很小的数,该点即 为找到的点.
④ 算法必须对P2做相同的处理,找到点A。 ⑤ 计算AB的可见性,决定是否显示AB线段.
示例:
对于A线段, P1(0000).p2(0000),显示出来
第二,对于p1p2,当code 码中同时有两位不等于0 时,求 交运算的次数多达四次. 如图2中直线P1P2 与窗口的四 条边的交点分别为A、B、C、D。而实际上,直线只与窗 口的两条边相交,另外两个交点发生在边的延长线上。
编码裁剪算法需要求线段与边界的交点
如果使用将线段一分为二,那么求交点的过程可以 用二分法逐渐逼近来得到
“与”非零,丢弃,pb变为pm2。直到线段长度小于一个给定的值,计算该 点的 编码。对于p2做同样处理,最后得出线段C不可见。
对于选段D: P1(0001),p2(0100), “与”为零,不可判断。
从p1开始, pa=p1,pb=p2,pm1(0100),pbpm1丢弃,pm1代替pb,求 得pm2(0000),pm2与pb“与”,为零 ,pa=pm2,计算pm3(0000),
第一,当code1&code2≠0,能判断出直 线段显然在窗口之外. 然而这个条件
并没有包含所有的在窗口之外的直线段,比如: code1=0001,code2=0100,如图 中直线段P3P4,此时,
如何改进? code1&code2=0,但直线段也是完全在窗口之外.这就意
味着这类型的直线必须计算与窗口的边线求交,其实是 一种无意义操作;
Cr
0
else
1 当x x min Cl 0 else
若P1P2完全在窗口内, code1=0,且code2=0,则“取”; 若P1P2明显在窗口外code1&code2≠0,则“弃” ; 若P1P2明显在窗口外code1&code2=0,则不确定 ; 在交点处把线段分为两段。其中一段完全在窗口外,可弃
中点分割算法比较适合硬件实现
如果用软件来实现,中点分割算法的运行速度反而 比编码裁剪算法慢
中心思想: 1. 算法采用了裁剪算法相同的编码和检查办法 2. 先判断完全可见和显然不可见的线段 3. 不能判断的线段使用中点分割方法。
4. 算法从线段的两个端点出发,分别求出离本端点 最远的可见点。
5. 两个可见点之间的线段就是所求的可见线段
第三章
裁剪是抽取数据的一部分,或者识别一个指定区域 内部或外部的画面或图片的成分的过程。
按照被裁剪的图形可以分为:二维裁剪算法和三维 裁剪算法
按照裁剪区域的形状可以分为:规则区域和不规则 区域
本章二维裁剪算法只考虑举行和多边形,裁剪的对 象只考虑点、线段、多边形、字符等。
三维裁剪算法只考虑正方体和平截头正四棱锥两种 裁剪盒,裁剪对象只考虑线段。
p2
b
p1
p1
c
对于线段B P1(1000),p2(1000),非零,丢弃 对于线段C
p1
p2
p1
d a p2
P1(1000),p2(0010),“与”为零,不可判断,对P1
开始,pa=p1,pb=p2,求得pm1(1000),pb与pm1
p2
“与”为零,不可判断, pa=pm1,求得pm2(0010),Pb与pm2
对于线段的裁剪基本思想是:
① 线段是否全不在窗口里,若是,转5 ② 线段是否全在窗口,若是,转4
③ 计算该线段与窗口边界的交点,以此将线段分为两部分, 丢弃不可见的部分,剩余线段转2
④ 保留并显示该线段 ⑤ 算法结束 可以看到算法的核心有两个:
① 判断线段与窗口的关系。 ② 获取线段与窗口的交点。
Dk =0
任何平行于窗口某边界的直线,其Dk=0,k值对应于相应 的边界(k=1,2,3,4对应于左、右、下、上边界)。如 果还满足Mk<0,则线段完全在边界外,应舍弃该线段。如 果Dk=0并且Mk≥0,则线段平行于窗口某边界并在窗口内, 见图中所示。
公式还告诉我们:
1、当Dk<0时,线段从裁剪边界延长线的外部延伸到内部; 2、当Dk>0时,线段从裁剪边界延长线的内部延伸到外部;
所确定的矩形窗口内,那么下式成立:
xmin≤x0+ t· Δx≤xmax
ymin≤y0+ t· Δy≤ymax
t· Dk ≤Mk , k=1,2,3,4 其中: ① D1=-Δx, M1=x0-xmin ② D2= Δx, M2=xmax-x0 ③ D3=-Δy, M3=y0-ymin ④ D4= Δy, M4=ymax-y0 进行公式验证:
裁剪就是将指定窗口作为图形边界,将窗口内的图形保 留,而窗口外的图形则被舍弃。
裁剪处理过程
1、图元在窗口内外的判别;
2、图形元素与窗口的求交。
直线裁剪方法
◦ Cohen-Sutherland裁剪算法 ◦ 中点分割算法 ◦ 梁友栋-barskey算法
多边形裁剪方法
◦ Sutherland-Hodgman逐次多边形裁剪算法 ◦ Weiler-Atherton多边形裁剪算法
之。然后对另一段重复上述处理。
问题3:如何求交点?
问题4:如何才能使 算法效率高?
求交点:
① 已知线段的两个端点(x1,y1),(x2,y2),直线的方程 为y=k(x-x1)+y1,其中k=(y2-y1)/(x2-x1)
② 交点为: 左: x=XL
y=k(XL-x1)+y1
上:y=YT x=x1+(1/k)(YT-y1)
1 Sutherlan-Cohen算法 2 中点分割算法
3 梁友栋-Barsky算法 4 Sutherlan-Hodgman逐边裁剪算法
裁剪的意义
为了描述图形对象,我们必须存储它的全部信息,但有时 为了达到分区描述或重点描述某一部分的目的,往往将 要描述的部分置于一个窗口内,而将窗口外的部分“剪 掉”,这个处理过程叫做裁剪,裁剪在计算机图形处理中 具有十分重要的意义。
Cohen-Sutherland算法的实现
算法优点: 1) 简单将不需剪裁的直线舍弃。法则是:若是
一条直线的两头在同一地区,则该直线不需裁剪, 不然,该直线为也许剪裁直线。
算法的缺点? 2) 对也许剪裁的直线缩小了与之求交的边框范
畴。法则是:若是直线的一个端点在上(下、左、 右)域,则此直线与上边框求交,然后移除上边框 以上的局部。该法则对直线的另一端点也实用。这 样,一条直线至多只需与两条边框求交。
算法的思想:
① 对线段p1p2进行编码,如果p1p2可以直接保留或者舍弃, 算法结束,否则进入步骤2.
② 从p1出发寻找离p1最远的可见点B; ③ 从p2出发寻找离p2最远的可见点A; ④ AB之间的线段就是可见的线段。
1. 输入线段端点P1,P2 对于端点P0:
① P2是否可见,若可见,则它为离P1最远的可见点,算法 结束
公式1表示为: t*- Δx<=x0-xmin-xmin<=x0+t Δx 公式2表示为:t Δx<=xmax-x0- x0+t Δx<=xmax 公式3表示为:t*- Δy<=y0-ymin ymin<=y0+t Δy 公式4表示为: t Δy<=ymax-y0 y0+t Δy<=ymax
① D1=-Δx, M1=x0-xmin ② D2= Δx, M2=xmax-x0 ③ D3=-Δy, M3=y0-ymin ④ D4= Δy, M4=ymax-y0 得出结论:
最后汇聚成一点。计算该点的编码。对 p2进行同样处理。
梁友栋-Barsky算法(Liang-Barsky算法) 写入图形学教科书的唯一中国人的算 法 梁有栋教授的贡献
Liang-Barsky算法 几何连续理论 从几何学与纤维缠绕理论到基因工程
梁友栋先生出生于1935年7月,福建福州人. 19561960年于复旦大学作为研究生,师从苏步青先生学 习几何理论,1960年研究生毕业后任教于浙江大学 数学系,1984-1990年任数学系主任.
问题1:用什么方法解决该问题?
区域编码
◦ 由窗口四条边所在直线把二维平面分成9个区域,每个区域
赋予一个四位编码,CtCbCrCl,上下右左
来自百度文库
1
Ct
0
1 Cb 0
当y y max else 当y y min else
1 当x x max
Cr
0
else
1 当x x min Cl 0 else
一直致力于计算机辅助几何设计与计算机图形学方 面的研究.
80年代初提出了著名的Liang-Barsky裁剪算法,通过 线段的参数化表示,实现快速裁剪,至今仍是计算机 图形学中最经典的算法之一;
80年代末到90年代,梁友栋先生致力于几何连续性的 研究,提出了一系列几何连续性方面的理论和方法,成 为国际上几何连续性研究的重要力量;
基本思想: 对于每条线段算法分成三 种情况处理: 第一种:若线段完全在窗口内,则显示该线段称 “完全可见”,需要“取”之; 第二种:若明显在窗口外,称“完全不可见”.则 丢弃该线段。 第三种:若线段不满足“取”或 “弃”的条件,则 在交点处把线段分为两段. 其中一段完全在窗口 外,可弃之. 然后对另一段重复上述处理。
梁友栋和Barsky独立地提出了更快的参数化线段裁 剪算法
y yT
yB
AB
P0
xL
P1 D C
xB
设要裁剪的线段是P0P1。 P0P1 和窗口边界交于A,B,C,D四点.
算法的基本思想是从A,B和P0三 点中找出最靠近P1的点,图中要
x 找的点是B; 从C,D和P1中找出最 靠近P0的点。图中要找的点是C 点。那么BC就是P0P1线段上的可 见部分。
保留IJ
AN
CD:与窗口上边交点L, 弃CL 与窗口下边交点O, 弃OD
DO G H
与窗口右边交点M, 弃LM
与窗口左边交点N, 弃NO
保留MN
求交次数最多
可达?
E I
C L
M
J
K
B
F
最多求交次数 为4
Cohen—SutherLand直线裁剪算法 直线和窗口的关系可以分为如下三类: 1) 整条直线在窗口之内,此时,不需裁剪,显 现整条直线。 2) 整条直线在窗口之外,此时,不需裁剪,不 显现整条直线。 3) 局部直线在窗口之内,局部直线在窗口之外, 此时,必要求出直线与窗框之交点,并将窗口外的 直线局部剪裁掉,显现窗口内的局部。
右: x=XR
下:y=YB
y=k(XR-x1)+y1
x=x1+(1/k)(YB-y1)
◦ 对于那些非完全可见、又非显然不可见的线段, 需要求交(如,线段CD) 求交前先测试与窗口哪条边所在直线有交?
规则:判断端点编码中各位的值CtCbCrCl
分别对应:上、下、右和左边 端点码位值等于1时,说明线段与对应窗口边
相交 次序:上、下、右和左边 以交点为界,丢弃外侧线段,
以交点为新端点判断另一线段, 重复上述过程
如:CD C:0000 D:1000 Dt位等于1,与上边相交
9
8
10
AB:与窗口左边相交,求交点H, AH和BH显然不可见
1
2 0
5
4
6
EF:与窗口上边交点I,弃EI
与窗口下边交点K,弃KF
与窗口右边交点J,弃KJ
区域编码
◦ 由窗口四条边所在直线把二维平面分成9个区域,每个区域
赋予一个四位编码,CtCbCrCl,上下右左
例端如点Ct : 编1给码0 出。当el直yse线y mAaxB的
A
问端AB::题点C10b2的00:10区01给10 域定当码e一lyse,条该y线m如in段何
B
判断属于1 哪当一x 种 x情ma况x ?
相关文档
最新文档