版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学算法基础作业 姓名: lh 学院: 理学院 专业: 计算数学 时间: 2010-12-31 lh 的计算机图形学作业 i 目录 1 直线段生成算法综述.1 1.1 生成直线的 dda 方法.1 1.1.1 dda 算法基本原理.1 1.1.2 dda 算法实现步骤.1 1.1.3 dda 算法程序(或伪程序)描述.2 1.1.4 dda 算法流程图.2 1.2 生成直线的 bresenham 算法.3 1.2.1 bresenham 算法基本原理.3 1.2.2 bresenham 算法实现步骤.5 1.2.3 bresenham 算法程序(或伪程序)描述.5 1.2.4 bres
2、enham 算法流程图.5 1.3 中点画线算法.2 1.3.1 中点画线算法基本原理.2 1.3.2 中点画线算法实现步骤.3 1.3.3 中点画线算法程序(或伪程序)描述.3 1.3.4 中点画线算法流程图.3 1.4 生成直线算法的进一步改进.5 1.5 各种直线生成算法的优缺点对比分析.6 1.6 直线生成算法的发展趋势.7 2 椭圆的 bresenham 生成算法.7 lh 的计算机图形学作业 ii 2.1 椭圆曲率分析.7 2.2 椭圆方程分析.7 2.3 椭圆生成算法.9 2.3.1 算法实现过程.9 2.3.2 算法流程图.10 2.3.3 算法程序描述.11 3 直线段裁剪算
3、法综述.11 3.1 sutherland-cohen 裁剪算法.11 3.1.1 sutherland-cohen 算法基本原理.11 3.1.2 sutherland-cohen 算法实现步骤.11 3.1.3 算法程序(或伪程序)描述.12 3.1.4 算法流程图.12 3.2 中点分割裁剪算法.12 3.2.1 中点分割算法基本原理与实现步骤.12 3.2.2 算法程序(或伪程序)描述.13 3.2.3 算法流程图.13 3.3 梁友栋barskey 算法.14 3.3.1 梁友栋barskey 算法基本原理与实现步骤.14 3.3.2 算法程序(或伪程序)描述.15 3.3.3 算法
4、流程图.15 3.4 快速算法.15 3.5 其余一些改进的直线裁剪算法.16 lh 的计算机图形学作业 iii 3.6 各种直线裁剪算法的优缺点对比分析.16 3.7 直线裁剪算法的发展趋势.16 4 图形求交技术.16 4.1 求交点算法.16 4.1.1 线与线的交点的求法.17 4.2.2 线与面的交点的求法.18 4.2 求交线算法.19 4.3 包含判定算法.21 4.4 重叠判定算法.26 4.5 凸包计算.26 5 自由曲线曲面造型技术.28 5.1 bezier 曲线和曲面.28 5.1.1 bezier 曲线.28 5.1.2 bezier 曲面.31 5.2 b 样条曲线
5、与曲面.32 5.2.1 b 样条的递推定义和性质.32 5.2.2 b 样条曲线.34 5.2.5 b 样条曲面.36 5.3 nurbs 曲线与曲面.37 5.3.1 nurbs 曲线.37 5.3.2 非均匀有理 b 样条(nurbs)曲面.39 5.4 coons 曲面.40 lh 的计算机图形学作业 iv 5.4.1 基本概念.40 5.4.2 双线性 coons 曲面.41 5.4.3 双三次 coons 曲面.42 6 cagd 中有关曲线曲面、拼接技术.44 n c n g 6.1 基本原理.44 6.2 bezier 曲线的的拼接条件.44 001122 cgcgcg、 6.
6、3 bezier 曲面的的拼接条件.46 0011 cgcg、 7 图形变换技术.48 7.1 二维图形几何变换.49 7.1.1 平移(translation).49 7.1.2 旋转(rotation).49 7.1.3 变比(scaling).50 7.2 三维图形几何变换.51 7.2.1 平移.51 7.2.2 旋转.51 7.2.3 变比.54 7.3 参数图形几何变换.54 7.3.1 圆锥曲线的几何变换.54 7.3.2 参数曲线、曲面的几何变换.55 7.4 投影变换.58 7.4.1 平行投影(parallel projection).58 7.4.2 透视投影(persp
7、ective projection).60 lh 的计算机图形学作业 v 8 图形消隐算法.61 8.1 扫描线 z-buffer 算法.61 8.2 区域子分割算法.61 8.3 光线投射算法.62 8.4 平面公式法.62 8.5 径向预排序法.63 8.6 径向排序法.63 8.7 隔离平面法.63 8.8 深度排序法.63 8.9 光线跟踪法.63 8.10 z 缓冲区法.64 8.11 极值检测法.64 8.12 深度分类方法.64 8.13 八叉树方法.65 9 图形学若干基本算法的实现研究.65 参考文献.68 附录.68 lh 计算机图形学作业:共九道题 1 图形学算法基础作业
8、图形学算法基础作业 1 直线段生成算法综述 1.1 生成直线的 dda 方法 1.1.1 dda 算法基本原理 dda 是数字微分分析式(digital differential analyzer)的缩写。设直线之 起点为,终点为,则斜率为: 11 x ,y() 22 x ,y()k 21 21 y -ydy k = x -xdx 直线中的每一点坐标都可以由前一点坐标变化一个增量而得到,即表示 xy d ,d 为递归式: iix iiy x1xd y1yd 并有关系: yx d m d 递归式的初值为直线的起点,这样,就可以用加法来生成一条直线。 11 x ,y() 1.1.2 dda 算法实
9、现步骤 具体方法是: 按照直线从到的方向不同,分为 8 个象限(见图 1.1) 。对于方向 11 x ,y() 22 x ,y() 在第 1a 象限内的直线而言,。对于方向在第 1b 象限内的直线而言, xy d1dm, 取值。各象限中直线生成时的取值列在表 1-1 之中。 yx d1d1/ m, xy d , d 图 1.1 直线方向的 8 个象限图 表 1-1 各象限中直线生成时的取值列 xy d , d lh 计算机图形学作业:共九道题 2 象限dxdy? x d y d 1a 1b 2a 2b 3a 3b 4a 4b t f t f t f t f 1 1/m -1 -1/m -1 -
10、1/m 1 1/m m 1 m 1 -m -1 -m -1 研究表中的数据,可以发现两个规律: 1、当时;否则:dxdy xy d=1, d= m xy d =1/ m d=1, 2、的符号与的符号相同。这两条规律可以导致程序的简化。由上 xy d , ddx, dy 述方法写成的程序如附录 1 所示。其中 steps 变量的设置,以及 等语句,正是利用了上述两条规律,使得程序变得简练。 xy d = dx/steps; d = dy/steps 使用 dda 算法,每生成一条直线做两次除法,每画线中一点做两次加法。因此, 用 dda 法生成直线的速度是相当快的。 1.1.3 dda 算法程序
11、(或伪程序)描述 具体程序见附录 1。 1.1.4 dda 算法流程图 (略) 1.2 中点画线算法 1.2.1 中点画线算法基本原理 假定直线斜率在之间,当前象素点为,则下一个象素点有k01 pp (x ,y ) 两种可选择点或。若与的中点称 1pp p (x1,y ) 2pp p (x1,y1) 1 p 2 p pp (x1,y0.5) 为 m,q 为理想直线与垂线的交点。当m 在 q 的下方时,则取应 p xx1 2 p 为下一个象素点;当m 在 q 的上方时,则取为下一个象素点。这就是中 1 p 点画线法的基本原理。 lh 计算机图形学作业:共九道题 3 1.2.2 中点画线算法实现步
12、骤 下面讨论中点画线法的实现。过点、的直线段 l 的方程 00 (x ,y ) 11 (x ,y ) 式为,其中,f(x,y)axbyc0 0101 ayy ,bxx 0110 cx yx y ,要 判断中点 m 在 q 点的上方还是下方,只要把m 代入,并判断它f(x,y) 的符号即可。为此,我们构造判别式: pppp df(m)f(x1,y0.5)a(x1)b(y0.5)c 当时, m 在 l(q 点)下方,取为下一个象素;d0 2 p 当时, m 在 l(q 点)上方,取为下一个象素;d0 1 p 当时,选或均可,约定取为下一个象素 。d0 1 p 2 p 1 p 注意到是的线性函数,可
13、采用增量计算,提高运算效率。d pp x ,y 若当前象素处于情况,则取正右方象素,要判下一个象素位d0 1pp p (x1,y ) 置,应计算,增量为 a。 1pppp df(x2,y0.5)a(x2)b(y0.5)cda 若时,则取右上方象素。要判断再下一象素,则要d0 2pp p (x1,y1) 计算,增量为 2pppp df(x2,y1.5)a(x2)b(y1.5)cdab 。画线从开始,的初值ab 00 (x , y )d ,因,所以。 00000 df(x1,y0.5)f(x ,y )a0.5b 00 f(x ,y )0 0 da0.5b 由于我们使用的只是的符号,而且的增量都是整
14、数,只是初始值包dd 含小数。因此,我们可以用代替来摆脱小数,写出仅包含整数运算的算2dd 法程序。 1.2.3 中点画线算法程序(或伪程序)描述 具体程序见附录 2 1.2.4 中点画线算法流程图 (略) 1.3 生成直线的 bresenham 算法 1.3.1 bresenham 算法基本原理 本算法由 bresenham 在 1965 年提出。设直线从起点到终点。直 11 x , y() 22 x , y() 线可表示为方程。其中y = kx+b 11 b = yk x 21 21 y - ydy k = x -xdx lh 计算机图形学作业:共九道题 4 我们讨论先将直线方向限于 1a
15、 象限(图 1.1)在这种情况下,当直线光栅化时, x 每次都增加 1 个单元,即 。而 y 的相应增加应当小于 1。为了光栅化, ii x1= x +1 只可能选择如图 1.2 两种位置之一。 i y +1 图 1.2 的位置选择 i y +1 图 1.2 中 的位置选择 或者 i y +1 ii y -1= y ii y +1= y +1 选择的原则是看精确值与及的距离 d1 及 d2 的大小而定。计算式为:y i y i y +1 i i i y = m x +1 +b (1.2.1) d1= y- y (1.2.2) d2 = y +1- y (1.2.3) 如果,则,否则。因此算法的
16、关键在于简便地求出d1-d2 0 ii y +1= y +1 ii y +1= y 的符号。将式(1.2.1) 、 (1.2.2) 、 (1.2.3)代入,得d1-d2d1-d2 iii dy d1-d2 = 2y-2y -1= 2(x +1)-2y +2b-1 dx 用乘等式两边,并以代入上述等式,得dx i p = dx d1-d2 iii p = 2x dy-2y dx+2dy+dx 2b-1 (1.2.4) 是我们用以判断符号的误差。由于在 1a 象限,总大于 0,所以仍旧可以d1-d2dx i p 用作判断符号的误差。为: i p1 iiii p +1= p +2dy-2dx y +
17、1-y (1.2.5) 误差的初值 p1,可将 x1, y1,和 b 代入式(2.1.4)中的而得到:xi, yi 1 p = 2dy-dx 1.3.2 bresenham 算法实现步骤 综述上面 1.3.1 的推导,第 1a 象限内的直线 bresenham 算法思想如下: 1、画点(x1, y2); dxx2x1; dyy2y1; 计算误差初值 p1=2dy-dx; i=1; lh 计算机图形学作业:共九道题 5 2、求直线的下一点位置: xi+1=xi+1; if pi0 则 yi+1=yi+1; 否则 yi+1=yi; 3、画点(xi+1, yi-1) ; 4、求下一个误差 pi+1;
18、 if pi0 则 pi+1=pi+2dy-2dx; 否则 pi+1=pi+2dy; 5、i=i+1; if i dy 别将 2a,3a 象限的直线和 3b,4b 象限的直线变换到 1a,4a 和 2b,1b 方向去,以求得程 序处理的简洁。 1.3.4 bresenham 算法流程图 (略) 1.4 生成直线算法的进一步改进 除过前面所讲到的 3 种基本直线生成算法外,还有一些其它的方法,由于过多, 这里仅列举几种如下: (1)二步法。虽然 bresenham 直线生成算法是一效率很高的算法,但是人们仍 在寻找更有校的算法。1987 年又有人提出了一种二步法。即每循环一次不是绘制一 个像素,
19、而是绘制两个像素,这样无疑可把生成直线的速度提高一倍。 (2)改进的 bresenham 算法。对于对于传统的直线生成算法,人们往往把注意 力集中在算法本身,却忽略了算法之外的一些有用信息:画线之前,从起点坐标和终 点坐标,我们就可以获知该线段的斜率,由此可进一步得出在主轴方向连续走 l 个步 长,在副轴方向才走一个坐标单位,这就是本算法提高 bresenham 算法执行效率的一 个方面。提高算法效率的第二个方面是利用线段本身的对称性,则新算法所产生的起 点一侧的半条线段与用 bresenham 算法产生的相同。至于终点一侧的半条线段,可以 看成以终点为起点线段的生成。 lh 计算机图形学作业
20、:共九道题 6 算法实现: 特殊地,对于水平线(),垂直线()和对角线(),它们都可直y0 x0 xy 接装人帧缓冲器,而无需进行画线算法处理。 从以上的描述可以实现优于 bresenham 的直线生成算法。其中待生成直线的已知 数据为:为线段起点的横、纵坐标;为线段终点的横、纵坐标。 11 (x ,y ) 22 (x ,y ) 算法的输人数据为: ,。 11 (x ,y ) 22 (x ,y ) (3)基于类最佳逼近的散步直线生成算法。一种新的直线逼近方法类最佳逼 近,基于这种逼近方法,斜率的直线和斜率为的直线具有某种互补性质。k0,0.51 k 利用该性质,设计出一种新的三步直线方法,该算
21、法揭示了直线计算的互补性,理论简 单,精度达到最好。这种算法改善了 bresenham 算法和双步算法的计算效率。该算法 对于硬件实现将更有益处。 除此之外直线生成算法还有对称扫描四步增量画线算法、基于 bresenham 的高效 直线生成集成算法、基于 bresenham 算法的四步画直线算法、基于直线特性的直线生 成集成算法、基于自适应步长的直线生成算法、基于等分像素点的直线生成算法、6 步直线生成算法、基于对角线行程的直线生成算法等等。 1.5 各种直线生成算法的优缺点对比分析 dda 算法的优点是:绘制实数直线效果好,误差小;缺点是:实现较复杂,不 利于硬件实现。因为该算法涉及到实数乘
22、除法运算,y 与 k 必须用浮点数表示,而且 每一步都要对 y 四舍五入后取整。 中点画线算法优点是:只有整数运算,不含乘除法;可用硬件实现。 bresenham 算法的优点是: 1、不必计算直线之斜率,因此不做除法; 2、不用浮点数,只用整数; 3、只做整数加减法和乘 2 运算,而乘 2 运算可以用硬件移位实现。 4、bresenham 算法速度很快,并适于用硬件实现。 1.6 直线生成算法的发展趋势 (略) 2 椭圆的 bresenham 生成算法 2.1 椭圆曲率分析 椭圆(为沿轴方向的长半轴长度,为沿轴方向的cos , sinrat btaxb y lh 计算机图形学作业:共九道题 7
23、 短半轴长度,且) ,曲率为,在第一象限ab 22223/2 /(sincos) r kabatbt ,将对 求导数,有,即曲率为减函数,在点(即)0,/ 2t r ktd/d0 r kt ( ,0)a0t 处的曲率;在点(即)处的曲率。半径 2 (0) / r t ka b (0, )b/ 2t 2 (/2) / r t kb a 为的圆的曲率为,半径为的圆的曲率为,两圆的曲率关系为a 2 /a ab 2 /b b ,则两圆的曲率在椭圆上点与的曲率之间,四者的 22 /()b ba aab( ,0)a(0, )b 关系为:。 22 /1/1/a bbab a 2.2 椭圆方程分析 根据椭圆及
24、圆的曲率分析,椭圆弧分别由半径为和的圆弧逼近生成。为了更ab 准确的由圆弧生成椭圆弧,在椭圆弧上确定一点,将椭圆弧分成曲率较小和曲率较 0 p 大的两段,椭圆方程为: 。 222222 f x,y0b xa ya b 其中为沿轴方向的长半轴长度,为沿轴方向的短半轴长度,且axb y 。由于椭圆的对称性,这里只要讨论第一象限椭圆弧的生成。将椭圆弧0ab 分为上下两部分,以弧上曲率为-1 的点(即法向量两个分量相等的点)作为分界。 该椭圆上一点处的法向量为:( , )x y 22 ff n( , )ij2i 2jx yb xa y xy 结合椭圆方程可计算出分界点的坐标为: 0 p 。 22222
25、2 (/,/)aabbab 以点为分界点,将第一象限的圆弧分成曲率较大和较小的两段弧。如图 2.1 所 0 p 示,的椭圆弧,与半径为的圆在点到 222 /, ybabba 1 t (0, )a 的圆弧上对应。在椭圆弧上任取一点,过作垂 22222 2 t (/,/)aababab 1 q 1 q lh 计算机图形学作业:共九道题 8 直线与圆交于点,连接圆心与点,与轴的夹角为。则 1 p 1 py 椭圆的参数方程可表示为: sin, cos. xa yb 圆的参数方程可表示为: sin, cos. xa ya 对于同一 ,椭圆弧上存在唯一的点与圆弧上的点对应,并且对应点的坐标存在 如下关系:
26、 , ( / )y. xx yb a 图 2.1 圆弧与椭圆弧对应点之一 图 2.2 圆弧与椭圆弧对应点之一 如图 2.2 所示,半径为的圆上,从点到b 22222 3 t (/,/)aabbbab 的圆弧与椭圆上的椭圆弧对应,在椭圆弧上任取一点 4 t ( ,0)b 222 (0,/)ybab ,过作垂直线与圆交于点,连接圆心与点,与轴的夹角为。则 2 q 2 q 2 p 2 py 椭圆的参数方程可表示为: sin, cos. xa yb 圆的参数方程可表示为: sin, cos. xb yb lh 计算机图形学作业:共九道题 9 对于同一 ,椭圆弧上存在唯一的点与圆弧上的点对应,并且对应点
27、的坐标存在 如下关系: ( /b) , y. xax y 2.3 椭圆生成算法 当圆弧上的点从沿着图 2.1、图 2.2 的对应关系方向变化到时,椭圆( ,0)a( ,0)b 弧上相对应的点也从该方向变化到。( ,0)a 2.3.1 算法实现过程 1、计算分界点。 000 p (x ,y ) 2、用 bresenham 算法生成两段圆弧、。半径为, 1 c 2 c 1 ca ;半径为,。 222 0,/xaab 2 cb 222 y0,/bab 3、将圆弧进行比例变换:方向的比例系数为 1,方向的比例系数为 1 cx y ;将圆弧进行比例变换:方向的比例系数为,方向的比例系数/b a 2 cx
28、/a b y 为 1。 4、如图 2.3,已知椭圆上在第一象限的点,则椭圆上另外三个象限与q(x,y) 点对称的点分别为,因此只要画出在第一象限的q(x,y)( x,y),( x,y),(x,y) 图形,即可得到整个椭圆的图形。 图 2.3 椭圆对称性 2.3.2 算法流程图 椭圆的 bresenham 算法流程图如下: lh 计算机图形学作业:共九道题 10 计算分界点 000 px ,y 用 bresenham 算法计算圆弧 xy t ,t 计算对应圆弧上的点 结束 用 bresenham 算法计算圆弧 xy t ,t y n y n 图 2.4 椭圆的 bresenham 算法流程图 2
29、.3.3 算法程序描述 具体程序实现见附录 5。 3 直线段裁剪算法综述 裁剪裁剪:确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示 落在显示区内的那部分图形。这个选择过程称为裁剪。 直线段裁剪算法是复杂图元裁剪的基础。复杂的曲线可以通过折线段来近似,从 而裁剪问题也可以化为直线段的裁剪问题。 3.1 sutherland-cohen 裁剪算法 3.1.1 sutherland-cohen 算法基本原理 sutherlandcohen 算法分成两步。第一步是判断直线段是否完全在窗口内,若 开始 椭圆上点 y 的坐标大于 0 y 椭圆上点的 y 坐标大于 0 lh 计算机图形学作
30、业:共九道题 11 在则该线段称为完全可见的;或可显然的决定线段完全在窗口的外边,称为完全不可 见;对不能判断完全可见或完全不可见的线段则要进行第二步处理。这时需要计算出 直线段和窗口边界的一个交点,这个交点把直线分成两段,把其中一段显然完全不可 见的线段抛弃,对余下的部分再作第一步判断,重复上述过程,直到直线段最后余下 的部分可以用第一步的判断得出肯定结论为止。 3.1.2 sutherland-cohen 算法实现步骤 基本思想:对于每条线段分为三种情况处理分为三种情况处理: 21p p (1)若完全在窗口内,则显示该线段,简称“取”之。 21p p 21p p (2)若明显在窗口外,则丢
31、弃该线段,简称“弃”之。 21p p (3)若线段不满足“取”或 “弃”的条件,则在交点处把线段分为两段。其中 一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为快速判断,采用如下编码方法: 每个区域赋予 4 位编码(如图 3.1 所示): lrbt cccc 其中: other yy c other yy c bt 0 1 0 1 minmax other xx c other xx c lr 0 1 0 1 minmax 10011000 0001 1010 00000010 010001010110 xlxr yt yb 图 3.1 区域编码 图 3.2 线段不能用编码确定 若完全
32、在窗口内 code1=0,且 code2=0,则“取” 21p p 若明显在窗口外 code1y=y1+(y2-y1)*(xl-x1)/(x2-x1); else if(righty=y1+(y2-y1)*(xr-x1)/(x2-x1); else if(bottomx=x1+(x2-x1)*(yb-y1)/(y2-y1); else if(top x=x1+(x2-x1)*(yt-y1)/(y2-y1); 3.1.3 算法程序(或伪程序)描述 过程 clip 描述了这一算法。其中用一个集合(top,bottom,right,left)来表示端点的编 码。具体程序见附录 6。 3.1.4 算法
33、流程图 (略) 3.2 中点分割裁剪算法 3.2.1 中点分割算法基本原理与实现步骤 与前一种 cohen-sutherland 算法一样首先对线段端点进行编码,并把线段与窗 口的关系分为三种情况:完全可见、完全不可见和线段与窗口有交。对前两种情况, 进行一样的处理。对于第三种情况,用中点分割的方法求出线段与窗口的交点。 求线段与窗口的交点如下: 设要裁剪的线段是。中点分割算法可分成两个过程平行进行,即从出发找 01 p p 0 p 出离最近的可见点(图 3.3 中的 a 点) ,和从出发找出离最近的可见点(图 0 p 1 p 1 p 3.3 中的 b 点) 。这两个最近可见点的连线就是原线段
34、的可见部分。 从出发找出最近可见点的办法是先求的中点,若不能定为显然不 0 p 01 p p m p 0m p p 可见,则取代替,否则取代替,再对新的求中点。重复上述 0m p p 01 p p m1 p p 01 p p 01 p p m p 过程,直到长度小于给定的小数 为止。 1m pp 图 3.4 是求的最近可见点的算法框图。求的最近可见点的算法框图是一样 0 pp 1 p 的,只要把和交换即可。 0 p 1 p 在显示时 可取成一个像素的宽度,对分辨率为的显示器来说,上面讲的 nn 22 二分的过程最多只要做 n 次。由于计算机过程只要做加法和除 2,所以特别适合用硬 件来实现。
35、lh 计算机图形学作业:共九道题 13 如果允许两个找最近点的过程平行进行,这样的话可使裁剪速度加快,增加算法 效率。 图 3.3 中点分割算法 3.2.2 算法程序(或伪程序)描述 具体程序见附录 7。 3.2.3 算法流程图 中点分割算法框图如图 3.4。 可见否? 0 p m01 p(pp )/ 2 1m pp ? 显然不可见 01 p p 显然不可见? 0m p p 0m pp 1m pp 0 ppexit 原线完全不可见 0m ppexit 否 否 否 否 是 是 是 是 图 3.4 中点分割算法框图 lh 计算机图形学作业:共九道题 14 3.3 梁友栋barskey 算法 3.3
36、.1 梁友栋barskey 算法基本原理与实现步骤 设要裁剪的线段是,的坐标是。和窗口边界交于 01 p p i p ii x ,y ,i0,1 01 p p a、b、c、d 四点,见图 3.5。算法基本思想是从 a,b 和三点中找出最靠近的点, 0 p 1 p 图 3.5 中要找的点是,从 c,d 和三点中找出最靠近的点,图 3.5 中要找的点 0 p 1 p 0 p 是 c 点。那么就是上的可见部分。 0 p c 01 p p x y yt yb xl xr a b c d 0 p 1 p 图 3.5 是可见部分 0 p c 具体计算时要把写成参数方程 01 p p 0 0 xxx t y
37、yy t 其中。把窗口边界的四条边分成两类,一类称为始边, 1010 xxx , yyy 另一类称为终边。 参数化形式写出裁剪条件: l1r b1t xxuxx yyuyy 可以统一表示为形式: kk qup 111221 311441 pxqxxlpxqxrx pyqyybpyqyty 当且,则线段完全在边界外,则该线段平行于裁剪边界并0 k p0 k q0 k q 且在窗口内; 当的情况下:当,线段从裁剪边界延长线的外部延伸到内部;当0 k p0 k p ,线段从裁剪边界延长线的内部延伸到外部。 k p0 对于每条直线,可以计算出参数和,它们定义了在裁剪矩形内的线段部分, 1 u 2 u
38、lh 计算机图形学作业:共九道题 15 的值由线段从外到内遇到的矩形边界所决定。对这些边界计算。 1 u0p kkk pqr/ 取 0 和各个值之中的最大值。的值由线段从内到外遇到的矩形边界所决定 1 u k r 2 u 。对这些边界计算。取 1 和各个值之中的最小值。如果,0p kkk pqr/ 2 u k r 21 uu 则线段完全落在裁剪窗口之外,被舍弃。否则裁剪线段由参数的两个值,计算u 1 u 2 u 出来。 3.3.2 算法程序(或伪程序)描述 具体程序见附录 8。 3.3.3 算法流程图 (略) 3.4 快速算法 在实际绘图时,常出现大部分线段是可见的,或大部分线段为显然不可见。
39、因而 用最少的操作去判断被裁剪的线段是否属于这两种情况则可以提高裁剪的效率。此外, 尽量减少比较和四则运算,也是提高效率的重要措施。这样会使程序长一点,但由于 效率高,在软件包中值得采用。用这样的算法确定一根显然不可见线段平均只要做 3.6 次比较,确定一根完全可见线段要用 8 次比较,而用 sutherland-cohen 算法做同 样工作则分别要做 11 次和 10 次比较。快速算法在最快的情况下要和四条边求交点, 这要用 10 次加减法、5 次乘除法和 13 次比较。采用 sutherland-cohen 算法要做 16 次加减法、8 次乘除法和 35 次比较。此外后者还要多次调用过程合
40、作集合运算,这 些都使它比快速算法效率低。 3.5 其余一些改进的直线裁剪算法 除过前面所讲到的 4 种基本直线裁剪算法外,还有一些其它的裁剪方法,由于过 多,这里仅列举几种如下: (1)具有最少算术运算量的二维线裁剪算法。见文献:王骏,梁友栋,彭群生, 具有最少算术运算量的二维线裁剪, 计算机学报 ,1991 年第 7 期。 (2)一个有效的多边形窗口的线裁剪算法。见文献:刘勇奎等,一个有效的多 边形窗口的线裁剪, 计算机学报 ,1999 年第 11 期。 (3)一种基于几何变换的高效的线裁剪新算法。见文献:汪乱,吴锐迅,蔡士 杰。一种基于几何变换的高效的线裁剪新算法。 软件学报 ,1998
41、,9(10): 728 一 733。 (4)任意多边形窗口的线裁剪算法。见文献:孙岩,唐棣:任意多边形窗口的线 lh 计算机图形学作业:共九道题 16 裁剪, 2000 年图形学会议专刊)。 3.6 各种直线裁剪算法的优缺点对比分析 sutherland-cohen 直线裁剪算法要计算直线段与窗口边界的交点,这不可避免 地要进行大量的乘除运算,必会降低程序的执行效率。而中点分割裁剪算法却只需用 到加法和除 2 运算,而除 2 运算在计算机中可以简单地用右移一位来实现,从而提高 算法的效率。所以特别适合硬件实现,同时也适合于并行计算。 3.7 直线裁剪算法的发展趋势 (略) 4 图形求交技术 4
42、.1 求交点算法 求交点可以分两种情况:求线与线的交点以及求线与面的交点。 4.1.1 线与线的交点的求法 1、直线段与直线段的交点 假设二条直线的端点分别为则它们可以用向量形式表示为:p1p2q1q2, p t = a+bt (0t1) q s = c+ds (0s1) 其中,。ap1bp2p1cq1dq2q1, 构造方程 a+bt = c+ds (4.1.1) 对三维空间中的直线段来说,上述方程实际上是一个二元一次方程组,由三个方 程式组成。可以从其中两个解出,再用第三个验证解的有效性:若第三个方程成s,t 立则说明找到了解,否则说明两条直线不相交。当所得的解是有效解时,可用 ii t ,
43、 s() 二个线段方程之一计算交点坐标,例如。 ii p t= a+bt 我们还可以根据向量的基本性质,直接计算 s 与 t:对(4.1.1)两边构造点积 得 c x da+bt = c x dc+ds()()() 由于 cxd 同时垂直于 c 和 d,等式右边为零。故有 (c d) a t (c d) b 类似地有 lh 计算机图形学作业:共九道题 17 (ab) c s (ab) d 完整的算法还应判断无解与无穷多解(共线)的情形,以及考虑数值计算误差造 成的影响。 2、直线段与二次曲线的交点 不失一般性,考虑平面上一条直线与同平面的一条二次曲线的交。 假设曲线方程为 ,f x,y = 0
44、 直线段方程为 , 11 x, y = x +tdx, y +tdy 则在交点处有 。 11 f x +tdx, y +tdy = 0 当曲线为二次曲线时,上述方程可写为 2 atbtc0 用二次方程求根公式即可解出 t 值。 3、圆锥曲线与圆锥曲线的交点 圆锥曲线有代数法表示、几何法表示与参数法表示。在进行一对圆锥曲线的求交 时,把其中一条圆锥曲线用代数/几何法表示为隐函数形式,另一条表示为参数形式 (如二次 nurbs 曲线) 。将参数形式代入隐函数形式可得关于参数的四次方程,可以 使用四次方程的求根公式解出交点参数。得到交点后可再验证交点是否在有效的圆锥 曲线段上。 4.2.2 线与面的
45、交点的求法 1、直线段与平面的交点(如图 4.1) 图 4.1 线段与平面求交 lh 计算机图形学作业:共九道题 18 考虑直线段与无界平面的求交问题。把平面上的点表示为,p u,w = a+ub+wc 直线段上的点表示为,二者的交点记为。假设线段不平行于平面,则 q t = d+ter 它们交于,即 r = p u,w = q t a+ub+wc = d+te 等式两边点乘,得b x c() b x ca+ub+wc = b x cd+te()()()() 由于既垂直于 b,又垂直于 c,故有b x c b x ca = b x cd+te()()() 可解出 (b c) a(b c) d
46、t (b c) e 类似求得 (c e) d (c e) a (c e) b u (b e) d (b e) a (b e) c 如果是直线与平面区域求交点,则要进一步判断点是否在平面上的有效区域中, 其算法可参见 4.2 节。 2、圆锥曲线与平面的交点 圆锥曲线与平面求交时,可以把圆锥曲线表示为参数形式,并把圆锥曲线的参数 形式代入平面方程,即可得到参数的二次方程进行求解。 3、圆锥曲线与二次曲面的交点 圆锥曲线与二次曲面求交时,可把圆锥曲线的参数形式代入二次曲面的隐式方程, 得到参数的四次方程,用求根公式求解。 4.2 求交线算法 求交线显然是指求面与面的交线,下面讨论几种常见的情况。 1
47、、平面与平面的交线 在 cad 中一般使用平面上有界区域。先考虑最简单的情形。两个平面区域分别由 定义。如果它们不共面而且不分离,则必交于一直线p u,w , q s,t , u, w, s, t 0, 1 段。这条直线必落在所定义的无限直线上。注意这是个含有四个p u,w -q s,t = 0 未知数,三个方程式的方程组,只要分别与八条边界线方程: 联立,即可求出线段的两个端点的参数。u = 0, u =1, w = 0, w =1, s = 0, s =1, t = 0, t =1 在上述方程组中,只要找到两组解,就可以不再对剩余其它方程组求解。找到的两组 lh 计算机图形学作业:共九道题
48、 19 解就是所求的交线段端点参数。 当两个一般的多边形(即既可能是凸的,也可能是凹的,甚至可能带有内孔)相 交时,可能有多段交线。我们可以把两个多边形分别记为 a 和 b,用如下的算法求出 它们的交线: (1)把 a 的所有边与 b 求交,求出所有有效交点; (2)把 b 的所有边与 a 求交,求出所有有效交点; (3)把所有交点先按 y,再按 x 的大小进行排序; (4)把每对交点的中点与 a 和 b 进行包含性检测,若该中点即在 a 中又在 b 中, 则该对交点定义了一条交线段。 2、平面与二次曲面的交线 求平面与二次曲面的交线有两种方法:代数法和几何法。 用代数法考虑平面与二次曲面求交
49、问题时,可以把二次曲面表示为代数形式: 222 ax +by +cz +2dxy+2eyz+2fxz+2gx+2hy+2iz+j = 0 可以通过平移与旋转坐标变换把平面变为 xoy 平面,对二次曲面进行同样的坐标 变换。由于在新坐标系下平面的方程为,所以新坐标系下二次曲面方程中,把z0 含 z 项都去掉即为平面与二次曲面的交线方程(在新坐标系下) 。对该交线方程进行 一次逆坐标变换即可获得在原坐标系下的交线方程。在具体实现时,交线可以用二元 二次方程系数表示(代数表示) ,辅之以局部坐标系到用户坐标系的变换矩阵。这种 方法的缺点是,每当需要使用这些交线时,都要进行坐标变换。例如,判断一个空间
50、 点是否在交线上,必须先对它进行坐标变换,变到平面上,再进行检测。需要z0 绘制该交线时,也要先在局部坐标系下求出点坐标,再变换到用户坐标系下的坐标。 所以交线采用另一种方法(几何表示)更合理。几何方法存储曲线的类型(椭圆、抛 物线或双曲线) ,以及定义参数(中心点、对称轴、半径等大小尺寸)的数值信息, 使用局部坐标系到用户坐标系的变换,把局部坐标系下的定义参数变换到用户坐标系 直接使用。这第二种方法使用较少的变换,但需要用计算来判断曲线的种类,及计算 曲线的定义参数。由于浮点运算的不精确性,容易发生判错类型以及定义参数误差过 大的问题。 当平面与二次曲面的交线需要精确表示时,往往采用几何法求
51、交。二次曲面采用 几何表示,平面与二次曲面求交时,根据它们的相对位置与角度(根据定义参数) , 直接判断交线类型,其准确性大大优于用代数法计算分类的方法。几何法不需要对面 进行变换,所以只要通过很少的计算就可以得到交线的精确描述。由于存储的信息是 具有几何意义的,所以判断相等性、相对性等问题时,可以确定有几何意义的容差。 下面以平面一球求交为例,说明几何法求交算法。 lh 计算机图形学作业:共九道题 20 平面用一个记录 p 表示,p 的两子域 p.b, p.w 分别代表平面上一点与平面法向 量。球面用记录 s 表示。它的两个子域 s.c, s.r 分别代表球面中心和半径。则可写 出平面与球面
52、相交的算法如下: plane_sphere_intersect(p, s) plane p; sphere s; d=球面中心到平面的有向距离; if(abs(d)=s.r) 二个面相交于一(切)点 s.c-d * p.w; else if (abs(d)s.r) 两个面无交; else 所求交线是圆。其圆半,半径,圆所在平面法向量为 c=s.c-d * p. w; r=sqr t(s.r2-d2); w=p.w; 一个平面与一个圆柱面可以无交、交于一条直线(切线) 、二条直线、一个椭圆 或一个圆,可以用两个面的定义参数求出它们的相对位置关系和相对角度关系,进而 判断其交属于何种情况,并求出交
53、线的定义参数。平面与圆锥的交线也可类似求出。 3、平面与参数曲面的交线 最简单的方法是把参数曲面的表示代入平面方程 x s,t , y s,t , z s,t() ax+by+cz+d = 0 得到用参数曲面的参数 s、t 表示的交线方程 ax s,t +by s,t +cz s,t +d = 0 另一种方法是用平移和旋转变换对平面进行坐标变换,使平面成为新坐标系下的 平面。再用相同的变换应用于参数曲面方程得到参数曲面在新坐标系下的方程xoy * x , y , z= xs,t , ys,t , zs,t()() 由此得交线在新坐标系下的方程为。 * zs,t0 lh 计算机图形学作业:共九道
54、题 21 4.3 包含判定算法 在进行图形求交时,常常需要判定两个图形间是否有包含关系。如点是否包含在 线段、平面区域、三维形体中,线段是否包含在平面区域、三维形体中,等等。许多 包含判定问题可转化为点的包含判定问题,如判断线段是否在平面上可以转化为判断 其两端点是否在平面上。因此下面主要讨论关于点的包含判定算法。 判断点与线段的包含关系,也就是判断点与线的最短距离是否位于容差范围内。 造型中常用的线段有三种: 1、直线段; 2、圆锥曲线段(主要是圆弧) ; 3、参数曲线(主要是 bezier,b 样条与 nurbs 曲线) 。 点与面的包含判定也类似地分为三种情况。下面分别讨论。 1、点与直
55、线段的包含判定 假设点坐标为,直线段端点为,则点 p 到线p x,y,z 1111 p x ,y ,z 2222 px ,y ,z 段的距离的平方为 12 pp 2 222 211211211 111 222 212121 xxxxyyyyzzzz d2xxyyzz xxyyzz 当时,认为点在线段(或其延长线)上,这时还需进一步判断点是否落在直线d20 段的有效区间内。只要对坐标分量进行比较,假设线段两端点的 x 分量不等(否则所 有分量均相等,那么线段两端点重合,线段退化为一点) ,那么当与反号 1 xx 2 xx 时,点 p 在线段的有效区间内。 2、点与圆锥曲线段的包含判定 以圆弧为例
56、,假设点的坐标为,圆弧的中心为,半径为 ,起x, y, z 000 x , y , z()r 始角,终止角。这些角度都是相对于局部坐标系 x 轴而言。圆弧所在平面为 1 2 ax+by+cz+d = 0 先判断点是否在该平面上,若不在,则点不可能被包含。若在,则通过坐标变换, 把问题转换到二维的问题。 给定中心为,半径为 ,起始角,终止角的圆弧,对平面上一点 00 x , y()r 1 2 ,判断 p 是否在圆弧上,可分二步进行。p x, y() 第一步判断 p 是否在圆心为,半径为 的圆的圆周上,即下式是否成立: 00 x , y()r 22 00 ()()rxxyy lh 计算机图形学作业
57、:共九道题 22 第二步判断 p 是否在有效的圆弧段内。 3、点与参数曲线的包含判定 设点坐标为,参数曲线为。点也参数曲线的求p x, y, z q t = x t , y t , z t 交计算包括三个步骤: (1)计算参数 值,使到的距离最小;tp q t (2)判断 是否在有效参数区间内(通常为) ;t01, (3)判断与的距离是否小于 。若(2) , (3)步的判断均为“是” ,则 q tp 点在曲线上;否则点不在曲线上。 第一步应计算 ,使得最小,即t p q t 2 r t = p-q tp-q t= p-q t 最小 根据微积分知识,在该处即r (t) = 0 q (t) p-q
58、 t= 0 用数值方法解出 值,再代入曲线参数方程可求出曲线上对应点的坐标。第(2) 、t (3)步的处理比较简单,不再详述。 4、点与平面区域的包含判定 设点坐标为,平面方程为。则点到平面的距离为p x, y, zax+by+cz+d = 0 222 ax+by+cz+d r = a +b +c 若 ,则认为点在平面上,否则认为点不在平面上。在造型系统中,通常使r 用平面上的有界区域作为形体的表面。在这种情况下,对落在平面上的点还应进一步 判别它是否落在有效区域内。若点落在该区域内,则认为点与该面相交,否则不相交。 下面以平面区域多边形为例,介绍有关算法。判断平面上一个点是否包含在同平面的
59、一个多边形内,有许多种算法,这里仅介绍常用的三种:叉积判断法、夹角之和检验 法以及交点计数检验法。 (1)叉积判断法 假设判断点为。多边形顶点按顺序排列为。如图 4.2 所示。令 0 p 12n ppp 。那么,在多边形内的充要条件是叉积 ii0n1 vpp , i1, 2, , n, v1v 0 p 的符号相同。叉积判断法仅适用于凸多边形。当多边形为 ii v x v +1 i1, 2, , n、 凹时,尽管点在多边形内也不能保证上述叉积符号都相同。这时可采用后面介绍的两 lh 计算机图形学作业:共九道题 23 种方法。 图 4.2 叉积判断法 (2)夹角之和检验法 假设某平面上有点和多边形
60、,如图 4.3 所示。将点分别与相连, 0 p 12345 pp p p p 0 p i p 构成向量。假设角 。如果,则点在多边形之外, i0 vpp i0ii pp p1 0 5 1 i i 0 p 如图 4.3(a)所示。如果,则点在多边形之内,如图 4.3(b)所示。可 2 5 1 i i 0 p i 通过下列公式计算:令, ,则,所以 iii svxv1 iii cv v1 iii tgs /c 且的符号即代表角度的方向。 iii arctg s /c i 图 4.3 夹角之和检验法 在多边形边数不太多( 0 x,y,z() 见的或隐的) ; 如果,则观察点在凸型多面体外部(称该表面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 师德师风提升年活动简报范文(6篇)
- 农村培训课件
- 开学第一课观后感(汇编15篇)
- 2024年中国折扣零售行业市场现状、前景分析研究报告(智研咨询发布)
- 二零二五年度海上风电项目土地租赁与海上平台建设合同3篇
- 二零二五年度林业资源综合开发承包协议3篇
- 2025版食用菌木屑研发与生产合作合同3篇
- 二零二五年度旅游线路设计与开发合作协议3篇
- 2025版环境执法检查相关方环境管理协议3篇
- 鼓励幼儿自主探索的教学方法计划
- 2025-2030年中国电动高尔夫球车市场运行状况及未来发展趋势分析报告
- 河南省濮阳市2024-2025学年高一上学期1月期末考试语文试题(含答案)
- 2024年08月北京中信银行北京分行社会招考(826)笔试历年参考题库附带答案详解
- 苏教版二年级数学下册全册教学设计
- 职业技术学院教学质量监控与评估处2025年教学质量监控督导工作计划
- 金字塔原理与结构化思维考核试题及答案
- 基础护理学导尿操作
- 标牌加工风险防范方案
- 2024年湖南高速铁路职业技术学院单招职业适应性测试题库及答案解析
- 【字贴】人教PEP版-小学英语四年级上册单词表国标体描红字帖(含音标)
- 如何写好赏析文章
评论
0/150
提交评论