第4章窗口裁剪
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)当A>xR,(右侧部分) 方法同上
(A,B)
YB XL
XR
改进求交和交点有效性判别
采用参数方法
直线端点(x1,y1)、(x2,y2),参数方程: p ( x2 x1 ) x x1 pt1 q ( y2 y1 ) y y1 qt1 窗口直线端点(x3,y3)、(x4,y4) r ( x4 x3 ) x x3 rt 2 (x2,y2 ) s ( y4 y3 ) y y3 st 2
a类:完全可见线段 b类:显然完全不可见 c类:其他线段 只计算c类的交点 利用端点编码实现分类 最终可见的为a类
K
M
N L
编码方法
端点编码方法,4位XXXX 1001
1000 1010
X<XL: 1 X>XR: 1 0001 Y<YB: 1 Y>YT:1 0101 按位“与” 0x0=0; 0x1=0; 1x0=0; 1x1=1
窗口到视区的转换
iv(3) iv(1) 令 av w(3) w(1)
x方向伸缩比
bv iv(1) av w(1) 视图区中定位点在x方向 的偏移量 iv(4) iv(2) cv y方向伸缩比 w(4) w(2) dv iv(2) cv w(2) 视图区定位点在y方向的
w(3) w(1) aw iv(3) iv(1)
bw w(1) awiv(1) w(4) w(2) cw iv(4) iv(2) d w w(2) cwiv(2)
第二节 二维线段的裁剪
目的:将窗口内感兴趣的图形保留下来,
窗口外的图形裁剪掉 主要步骤:
3 4 5 11 8 6 7 2 1
13
起点
10
9
Pc
双边裁剪法
适用范围:任意凸凹多边形的裁剪。 优点:算法原理简单,程序实现容易 缺点:计算工作量大,存储空间较大
曲线、曲面、字符裁剪
直线逼近曲线,小平面逼近曲面
字符用包围盒
矢量法——按照矢量求交 中点分割法——以中点对线段进行分 线段裁剪: 割,判别 编码法——分为9个区域对端点编 码,判别是否为可见线段或显然完 全不可见 矢量法——字符分解为矢量,裁剪 字符裁剪: 字符包围盒法——以包围盒的基点 相对于窗口进行判别 逐边裁剪法——用窗口的4条边依次 裁剪 多边形裁剪: 双边裁剪法——用窗口裁剪用户多 边形
y w(3),w(4) (x,y) w(1),w(2) y
利用对应边成比例
iv(3),iv(4) (ix,iy)
x
iv(1),iv(2)
x
窗口到视区的转换
ix av x bv iy cv y d v
av cv 1
窗口区视图区大小相等 窗口区视图区原点相同
bv d v 0
偏移量
av cv
图形会发生畸变
变换中的变形
10,10 8,8
av cv
0,0 变形 0,0 8,8
10,5
av cv
8,4 0,0
av cv
0,0
5,10
变形 0,0 8,8
av cv
4,8
av cv
0,0 0,0 0,0
视区到窗口的变换
x awix bw y cwiy d w
双边裁剪法裁剪原理
沿Ps任一点出发,跟踪Ps的每一条边,若Ps与
Pc有交,则:
当Ps的边进入Pc时,则继续跟踪Ps,同时输出该 线段 Ps
13
5
起点
Pc
双边裁剪法裁剪原理
当Ps的边穿出Pc时,则从此点(前交点)开始, 沿着窗口边框向右检测Pc的边,找到Ps与Pc最靠 近前交点的新交点,同时输出由前交点到此新交 点之间窗边上的线段; 返回到前交点,再沿着Ps处理各边,直到处理完 Ps的每一条边,回到起点为止。 12 Ps
XL
XR
计算步骤
•
若B>yT,同时D>yT ,在上部,否则,求得交点:
x A ( B yT B )( A C ) /( ,D)
YB XL XR
(2)当A<xL,(左侧部分)
若C<xL,与窗口无交,线段全部在左侧;否则求交:
从端点(A,B)开始,求窗口与线段交点
(x,y) (xs,ys ) 从端点(C,D)开始,求窗口与线段交点 (x,y) (C,D) 连接(xs,ys )与(x,y ) Y
T
YB
(xs,ys )
(A,B) XL XR
计算步骤(以AB端为例)
将x分成3个区域:中间、左、右 (1) xL
F A G D B E C A G D B J I L M N P Q J I C
F
A G D K
F
J
I L
M N
G D K
G D
K
J I L
约定:
双边裁剪法——窗口裁剪用户多边形
沿多边形走,右侧为多边形内部 窗口多边形——裁剪多边形Pc 用户多边形——主多边形Ps
窗口多边形 内 部 用户多边形
0000
0010 0110
0100
端点编码分类结果
结果为0000(端点均为0000),a类,可见 结果非0000,b类,显然完全不可见 结果为0000,c类,求交,分割线段,编码再
分类
K: 1001 L: 0000 M: 1000 L: 0000 N: 0000 L: 0000 0000,求交点M,(求交xL) 0000,求交点N, (求交yT )
围,指定一个基准点,用基准点判断是否在 窗口内,如果在,则字符串可见
TEST
三 多边形裁剪
多边形:有序线段首尾相接,封闭 裁剪后:仍为封闭多边形 方法:求出交点,重新排序,连接线段,形
成多边形
多边形 多边形
窗口
(1)逐边裁剪法
每次用窗口的一条边界对要裁剪的多边形进
行裁剪,保留窗口内部的图形
K
M
N L
0000, 属于a类,NL为可见线段
3 中点分割裁剪法
算法思想:对于c类,欲求交点,预先假设交
点落在中点上。如果不满足,则将直线分成2 段,对2段再分别加以测试。 分3步走:
从P1出发,找出离P1最近的可见点A 从P2出发,找出离P2最近的可见点B 连接AB点 P2
B
计算机图形学
机电学院 莫蓉
第四章 图形的裁剪及几何变换
第一节 窗口视图变换 一、窗口区和视图区
窗口 设计 对象
视图区 屏幕域
用户空间:设计对象空间
矩形区域,实数域
设备空间:显示空间
矩形区域,整数域
Geometric Processing
二、窗口区和视图区之间的坐标变换
ix iv(1) iv(3) iv(1) x w(1) w(3) w(1) iy iv(2) iv(4) iv(2) y w(2) w(4) w(2)
A
P1
6.1.5
中点分割法
P0 P1 (Pm P1代替 P0P1 ) Pm=(P0 + P1) /2 y Pm为交点 | P0 - Pm |< d n P0 Pm显然不可见? y P0=Pm P1=Pm n (P0 Pm代替 P0P1 ) 1 2 3 4
4 1
P1
2
Pm
P1
P0 3
三 字符裁剪
矢量裁剪:字符变成线段,用线段裁剪 字符(串)裁剪:将字符(串)用矩形框包
• (1)线段的端点在区域内、外的判别 • (2)图形元素与窗口的交点
线段裁剪算法:
矢量裁剪法
编码裁剪法 中点裁剪法
包围盒方法:快速粗略判断,去掉肯定不 相交的多边形
包围盒不交,线段
肯定不交 适于二维和三维 最小包围盒:简单 矩形框 包围盒相交:需详 细判断
1 矢量裁剪法
(x1,y1 ) (x4,y4 )
(x3,y3 )
联立求解 令:u x3 x1,v y3 y1 则 若
us rv t1 ps rq
uq pv t2 ps rq
t1,t2[0,1]范围内 , 则为有效交点
2 编码裁剪法
线段分类
b类
a类 c类
x xL y B ( A xL )(B D) /( A C )
判断y值有效性: yB y yT 交点有效
若 y yB或y yT ,同时yB B yT , 交点无效
若 y yB或B yB , 则可能存在 有效交点 , 按照前面的 (1)的2步 YT(C,D)
•
•
A xR (中间部分) 若 yB B yT则 x A, y B 点在内部 若 B yB, 同时 D yB , 点在下部,否则求
交:
B不等于D
(C,D)
x A ( B yB )( A C) /( B D) y yB
YT
• X有效判断:
YB
(A,B)
小结
(A,B)
YB XL
XR
改进求交和交点有效性判别
采用参数方法
直线端点(x1,y1)、(x2,y2),参数方程: p ( x2 x1 ) x x1 pt1 q ( y2 y1 ) y y1 qt1 窗口直线端点(x3,y3)、(x4,y4) r ( x4 x3 ) x x3 rt 2 (x2,y2 ) s ( y4 y3 ) y y3 st 2
a类:完全可见线段 b类:显然完全不可见 c类:其他线段 只计算c类的交点 利用端点编码实现分类 最终可见的为a类
K
M
N L
编码方法
端点编码方法,4位XXXX 1001
1000 1010
X<XL: 1 X>XR: 1 0001 Y<YB: 1 Y>YT:1 0101 按位“与” 0x0=0; 0x1=0; 1x0=0; 1x1=1
窗口到视区的转换
iv(3) iv(1) 令 av w(3) w(1)
x方向伸缩比
bv iv(1) av w(1) 视图区中定位点在x方向 的偏移量 iv(4) iv(2) cv y方向伸缩比 w(4) w(2) dv iv(2) cv w(2) 视图区定位点在y方向的
w(3) w(1) aw iv(3) iv(1)
bw w(1) awiv(1) w(4) w(2) cw iv(4) iv(2) d w w(2) cwiv(2)
第二节 二维线段的裁剪
目的:将窗口内感兴趣的图形保留下来,
窗口外的图形裁剪掉 主要步骤:
3 4 5 11 8 6 7 2 1
13
起点
10
9
Pc
双边裁剪法
适用范围:任意凸凹多边形的裁剪。 优点:算法原理简单,程序实现容易 缺点:计算工作量大,存储空间较大
曲线、曲面、字符裁剪
直线逼近曲线,小平面逼近曲面
字符用包围盒
矢量法——按照矢量求交 中点分割法——以中点对线段进行分 线段裁剪: 割,判别 编码法——分为9个区域对端点编 码,判别是否为可见线段或显然完 全不可见 矢量法——字符分解为矢量,裁剪 字符裁剪: 字符包围盒法——以包围盒的基点 相对于窗口进行判别 逐边裁剪法——用窗口的4条边依次 裁剪 多边形裁剪: 双边裁剪法——用窗口裁剪用户多 边形
y w(3),w(4) (x,y) w(1),w(2) y
利用对应边成比例
iv(3),iv(4) (ix,iy)
x
iv(1),iv(2)
x
窗口到视区的转换
ix av x bv iy cv y d v
av cv 1
窗口区视图区大小相等 窗口区视图区原点相同
bv d v 0
偏移量
av cv
图形会发生畸变
变换中的变形
10,10 8,8
av cv
0,0 变形 0,0 8,8
10,5
av cv
8,4 0,0
av cv
0,0
5,10
变形 0,0 8,8
av cv
4,8
av cv
0,0 0,0 0,0
视区到窗口的变换
x awix bw y cwiy d w
双边裁剪法裁剪原理
沿Ps任一点出发,跟踪Ps的每一条边,若Ps与
Pc有交,则:
当Ps的边进入Pc时,则继续跟踪Ps,同时输出该 线段 Ps
13
5
起点
Pc
双边裁剪法裁剪原理
当Ps的边穿出Pc时,则从此点(前交点)开始, 沿着窗口边框向右检测Pc的边,找到Ps与Pc最靠 近前交点的新交点,同时输出由前交点到此新交 点之间窗边上的线段; 返回到前交点,再沿着Ps处理各边,直到处理完 Ps的每一条边,回到起点为止。 12 Ps
XL
XR
计算步骤
•
若B>yT,同时D>yT ,在上部,否则,求得交点:
x A ( B yT B )( A C ) /( ,D)
YB XL XR
(2)当A<xL,(左侧部分)
若C<xL,与窗口无交,线段全部在左侧;否则求交:
从端点(A,B)开始,求窗口与线段交点
(x,y) (xs,ys ) 从端点(C,D)开始,求窗口与线段交点 (x,y) (C,D) 连接(xs,ys )与(x,y ) Y
T
YB
(xs,ys )
(A,B) XL XR
计算步骤(以AB端为例)
将x分成3个区域:中间、左、右 (1) xL
F A G D B E C A G D B J I L M N P Q J I C
F
A G D K
F
J
I L
M N
G D K
G D
K
J I L
约定:
双边裁剪法——窗口裁剪用户多边形
沿多边形走,右侧为多边形内部 窗口多边形——裁剪多边形Pc 用户多边形——主多边形Ps
窗口多边形 内 部 用户多边形
0000
0010 0110
0100
端点编码分类结果
结果为0000(端点均为0000),a类,可见 结果非0000,b类,显然完全不可见 结果为0000,c类,求交,分割线段,编码再
分类
K: 1001 L: 0000 M: 1000 L: 0000 N: 0000 L: 0000 0000,求交点M,(求交xL) 0000,求交点N, (求交yT )
围,指定一个基准点,用基准点判断是否在 窗口内,如果在,则字符串可见
TEST
三 多边形裁剪
多边形:有序线段首尾相接,封闭 裁剪后:仍为封闭多边形 方法:求出交点,重新排序,连接线段,形
成多边形
多边形 多边形
窗口
(1)逐边裁剪法
每次用窗口的一条边界对要裁剪的多边形进
行裁剪,保留窗口内部的图形
K
M
N L
0000, 属于a类,NL为可见线段
3 中点分割裁剪法
算法思想:对于c类,欲求交点,预先假设交
点落在中点上。如果不满足,则将直线分成2 段,对2段再分别加以测试。 分3步走:
从P1出发,找出离P1最近的可见点A 从P2出发,找出离P2最近的可见点B 连接AB点 P2
B
计算机图形学
机电学院 莫蓉
第四章 图形的裁剪及几何变换
第一节 窗口视图变换 一、窗口区和视图区
窗口 设计 对象
视图区 屏幕域
用户空间:设计对象空间
矩形区域,实数域
设备空间:显示空间
矩形区域,整数域
Geometric Processing
二、窗口区和视图区之间的坐标变换
ix iv(1) iv(3) iv(1) x w(1) w(3) w(1) iy iv(2) iv(4) iv(2) y w(2) w(4) w(2)
A
P1
6.1.5
中点分割法
P0 P1 (Pm P1代替 P0P1 ) Pm=(P0 + P1) /2 y Pm为交点 | P0 - Pm |< d n P0 Pm显然不可见? y P0=Pm P1=Pm n (P0 Pm代替 P0P1 ) 1 2 3 4
4 1
P1
2
Pm
P1
P0 3
三 字符裁剪
矢量裁剪:字符变成线段,用线段裁剪 字符(串)裁剪:将字符(串)用矩形框包
• (1)线段的端点在区域内、外的判别 • (2)图形元素与窗口的交点
线段裁剪算法:
矢量裁剪法
编码裁剪法 中点裁剪法
包围盒方法:快速粗略判断,去掉肯定不 相交的多边形
包围盒不交,线段
肯定不交 适于二维和三维 最小包围盒:简单 矩形框 包围盒相交:需详 细判断
1 矢量裁剪法
(x1,y1 ) (x4,y4 )
(x3,y3 )
联立求解 令:u x3 x1,v y3 y1 则 若
us rv t1 ps rq
uq pv t2 ps rq
t1,t2[0,1]范围内 , 则为有效交点
2 编码裁剪法
线段分类
b类
a类 c类
x xL y B ( A xL )(B D) /( A C )
判断y值有效性: yB y yT 交点有效
若 y yB或y yT ,同时yB B yT , 交点无效
若 y yB或B yB , 则可能存在 有效交点 , 按照前面的 (1)的2步 YT(C,D)
•
•
A xR (中间部分) 若 yB B yT则 x A, y B 点在内部 若 B yB, 同时 D yB , 点在下部,否则求
交:
B不等于D
(C,D)
x A ( B yB )( A C) /( B D) y yB
YT
• X有效判断:
YB
(A,B)
小结