图形学教案第五章图形运算(精品).ppt
《图形学教案第五章图形运算(精品).ppt》由会员分享,可在线阅读,更多相关《图形学教案第五章图形运算(精品).ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 图形运算图形运算 第一节第一节 线段的交点计算线段的交点计算 两条线段求交两条线段求交 设有两线段设有两线段ABAB和和CD,CD,其端点坐标分别为其端点坐标分别为(x xa a,y,ya a),),(x(xb b,y,yb b)和和(x xc c,y,yc c),(x),(xd d,y,yd d),),它们所在直线的参数方它们所在直线的参数方程分别为:程分别为:若两线段相交若两线段相交,则交点的参数值则交点的参数值,应满足应满足:即即 因此因此,若行列式若行列式 表示两线段表示两线段ABAB和和CDCD重合或平行。一般做为它重合或平行。一般做为它们不相交来处理。如果们不相交来处
2、理。如果 0,0,则可求出交点对则可求出交点对应的两个参数值应的两个参数值:需要注意需要注意,只有只有 ,时两线段时两线段才真正相交。否则才真正相交。否则,交点在两线段或其中某一交点在两线段或其中某一条线段的延长线上条线段的延长线上,这时仍然认为是两线段不这时仍然认为是两线段不相交。相交。两线段两线段ABAB和和CDCD交点的算法交点的算法 1.1.计算行列式计算行列式 (x xb b-x-xa a)(y)(yc c-y-yd d)-(x)-(xc c-x xd d)(y)(yb b-y-ya a)若若 =0,=0,则两线段重合或平行则两线段重合或平行,可算做无交可算做无交点点,算法结束算法结
3、束;2.2.计算交点参数计算交点参数 (x xc c-x-xa a)(y)(yc c-y-yd d)-)-(x(xc c-x-xd d)(y)(yc c-y-ya a)/)/若若 01,1,则无交点则无交点,算法结束算法结束;(x xb b-x-xa a)(y)(yc c-y-ya a)-(x)-(xc c-x-xa a)(y)(yb b-y-ya a)/)/若若 01,1,则无交点则无交点,算法结束算法结束;3.3.计算交点计算交点xxxxa a+(+(x xb b-x-xa a),yy),yya a+(+(y yb b-y ya a),),输出交点输出交点(x,y)(x,y)后算法结束后算
4、法结束;多条线段求交多条线段求交 寻找这样的算法寻找这样的算法,其计算工作量要大体其计算工作量要大体上与交点个数成正比上与交点个数成正比,即即只对有可能相交只对有可能相交的两线段计算交点的两线段计算交点,对不可能相交的线段对不可能相交的线段不计算交点不计算交点,使算法有更好的效率。使算法有更好的效率。我们称平面内两条线段在横我们称平面内两条线段在横坐标坐标x x处是可比较处是可比较的的,如果存在一如果存在一条通过条通过x x的垂直线的垂直线,此线与两条线此线与两条线段都相交。我们规定一个在段都相交。我们规定一个在x x处的处的 上面上面 关系关系为:在为:在x x处处,线段线段S S1 1在在
5、S S2 2的上面的上面,记为记为S S1 1 x xS S2 2,如果在如果在x x处可处可比较比较,且且S S1 1与垂直线的交点位于与垂直线的交点位于S S2 2与垂直线的交点的上面。与垂直线的交点的上面。其中,其中,S S2 2 S S4 4,S,S1 1 S S2 2,S,S2 2 S S4 4,S,S1 1 S S4 4 规定的次序关系对垂直的线段不适合规定的次序关系对垂直的线段不适合 两线段相交的两线段相交的必要条件必要条件,即若两线段相交即若两线段相交,则必然存在某个则必然存在某个x,x,使它们在规定的次序使它们在规定的次序关系关系xx下是相邻的。下是相邻的。算法从左向右扫描算
6、法从左向右扫描,在扫描过程维持正确的在扫描过程维持正确的线段间上述次序关系。这种次序关系只能有线段间上述次序关系。这种次序关系只能有三种可能的变化方式三种可能的变化方式:1 1遇见某条线段遇见某条线段S S的的左端点左端点,此时此时S S应应加入加入次序次序关系。关系。2 2遇见某线段遇见某线段S S的的右端点右端点,此时此时S S应从次序关系应从次序关系中中删除删除。3 3遇到某两条线段遇到某两条线段S S1 1和和S S2 2 的的交点交点,这时在次序这时在次序关系中关系中S S1 1和和S S2 2交换位置交换位置。算法实施需要两个基本的数据结构算法实施需要两个基本的数据结构:扫描线状态
7、表和事件点进度表扫描线状态表和事件点进度表 扫描线状态表扫描线状态表L L中存放按所规定次序关系中存放按所规定次序关系 x x排序的排序的线段的序列线段的序列。此表初始应为空。此表初始应为空,在平面在平面扫描过程中当关系扫描过程中当关系 x x改变时变化。改变时变化。事件点指扫描进行中可能使所规定次序关事件点指扫描进行中可能使所规定次序关系系 x x发生变化的发生变化的点点,存放于事件点进度表存放于事件点进度表E E中中,该表初始时应是排序的要求交点的各线段端点该表初始时应是排序的要求交点的各线段端点的坐标。在平面扫描过程中求出的的坐标。在平面扫描过程中求出的交点交点,应及应及时地时地插入插入
8、到事件点进度表中。到事件点进度表中。扫描线状态表应能支持以下四个操作扫描线状态表应能支持以下四个操作:(1)INSERT(S,L),(1)INSERT(S,L),把线段把线段S S插入到扫描插入到扫描线状态表线状态表L L中中,注意应插入到适当位置注意应插入到适当位置以保持正确的次序关系。以保持正确的次序关系。(2)DELETE(S,L),(2)DELETE(S,L),从从L L中删除线段中删除线段S S。(3)ABOVE(S,L),(3)ABOVE(S,L),返回次序关系中返回次序关系中S S上面上面紧接着的线段的编号。紧接着的线段的编号。(4)BELOW(S,L),(4)BELOW(S,L
9、),返回次序关系中返回次序关系中S S下下面紧接着的线段的编号。面紧接着的线段的编号。事件点进度表事件点进度表E E应能支持以下三个操应能支持以下三个操作作:(1)MIN(E),(1)MIN(E),取出表取出表E E中的最小元素。中的最小元素。(2)INSERT(x,E),(2)INSERT(x,E),把横坐标为把横坐标为x x的一个的一个点插入到表点插入到表E E中中,插入要使插入要使E E中事件点存中事件点存放保持递增次序。放保持递增次序。(3)MEMBER(x,E),(3)MEMBER(x,E),判定横坐标判定横坐标为为x x的的点是否在事件点进度表点是否在事件点进度表E E中。中。算法
10、算法:1.事件点进度表事件点进度表E初始化初始化将输入待求交点的将输入待求交点的n条线段的条线段的2n个端点按个端点按x,y字典式排序后存放字典式排序后存放于表于表E中中;2.准备收集交点准备收集交点A;A是一集合是一集合,初为初为空空,准备存入找到的交点准备存入找到的交点;3.平面扫描平面扫描若表若表E不为空不为空,则进行则进行(3.1)(3.3)循环。直到表循环。直到表E为空时算法结束。为空时算法结束。3.1取出当前事件点取出当前事件点PMIN(E);3.2当前事件点处理当前事件点处理考查当前事件点考查当前事件点P,分三分三种情况种情况:(1)若若P是边是边S的左端点的左端点,则做:则做:
11、INSERT(S,L);S1=ABOVE(S,L);S2=BELOW(S,L);若若S和和S1相交相交,则求出的交点送入集和则求出的交点送入集和A中中;若若S和和S2相交相交,则求出的交点送入集和则求出的交点送入集和A中中;(2)若若P是边是边S的右端点的右端点,则做:则做:S1=ABOVE(S,L);S2=BELOW(S,L);若若S1和和S2相交于点相交于点P的右边的右边,则求出的交点送则求出的交点送入集和入集和A中;中;DELETE(S,L);(3)若若P是边是边S1和和S2的交点的交点,且在且在P的左边的左边S1=ABOVE(S2),则做则做S3=ABOVE(S1,L);S4=BELO
12、W(S2,L);若若S3和和S2相交,则求出的交点送入集合相交,则求出的交点送入集合A中;中;若若S4和和S1相交,则求出的交点送入集合相交,则求出的交点送入集合A中;中;在在L中交换中交换S1和和S2的位置;的位置;3.3处理找到的交点处理找到的交点若集合若集合A不为空,做下面不为空,做下面循环,直至循环,直至A为空:为空:取出集合取出集合A中一个交点,其横坐标是中一个交点,其横坐标是x;若若MEMBER(x,E)为为FALSE,则输出此交点,则输出此交点,并并做做INSERT(x,E);设有三条线段设有三条线段S S1 1,S S2 2,S S3 3,它们的坐标如下它们的坐标如下 (1,1
13、),(5,3,),(2,3),(4,1),(6,4),(8,2).(1,1),(5,3,),(2,3),(4,1),(6,4),(8,2).要计要计算所有交点。算所有交点。算法初始形成的事件点进度表算法初始形成的事件点进度表E,可有形式可有形式(1,1),S1左端点左端点),(2,3),S2左左端点端点),(4,1),S2右端点右端点),(5,3),S1右右端点端点),(6,4),S3左端点左端点),(8,8),S3右右端点端点)算法步算法步骤骤从表从表E前面取出的扫描到前面取出的扫描到达的事件点达的事件点P扫描线状扫描线状态表态表L工作解释工作解释3.2(1)(1,1),S1左端点左端点)(
14、S1)3.2(1)(2,3),S2左端点左端点)(S1,S2)发生发生S1,S2求交求交,求出求出交点交点(3,2)插入插入E(4,1),S2右端点右端点)前前3.2(3)(3,2),S1和和S2的交点的交点(S2,S1)3.2(2)(4,1),S2右端点右端点)(S1)3.2(2)(5,3),S1右端点右端点)()3.2(1)(6,4),S3左端点左端点)(S3)3.2(2)(8,8),S3右端点右端点)()第二节第二节 多边形表面的交线计算多边形表面的交线计算 设两个要求交线的多边形表面都是凸多设两个要求交线的多边形表面都是凸多边形表面边形表面,分别由它们的顶点坐标分别由它们的顶点坐标逆时
15、针逆时针方方向的序列确定向的序列确定,即约定按顶点序列前行时内即约定按顶点序列前行时内部在左侧。部在左侧。根据顶点坐标求出两个多边形表面分别根据顶点坐标求出两个多边形表面分别所在所在平面的方程平面的方程,再根据平面方程计算交线再根据平面方程计算交线,最后最后,还要确定出还要确定出交线同时在两个多边形表交线同时在两个多边形表面内部的部分面内部的部分 求平面方程求平面方程 采用采用多个顶点多个顶点位置坐标来计算平面方位置坐标来计算平面方程可以减少由于不共面而引起的偏差。程可以减少由于不共面而引起的偏差。设要求出通过若干顶点的平面方程设要求出通过若干顶点的平面方程Ax+By+Cz+DAx+By+Cz
16、+D=0,=0,即要定出系数即要定出系数A,B,C,D,A,B,C,D,可可采用如下做法采用如下做法 平面方程平面方程Ax+By+Cz+DAx+By+Cz+D=0=0的系数的系数A,B,CA,B,C与该平面上多边形分别在与该平面上多边形分别在x=0,y=0,z=0 x=0,y=0,z=0三三个坐标平面上个坐标平面上投影的面积成比例投影的面积成比例 多边形在多边形在z=0z=0平面上投影的面积平面上投影的面积S S可如下求出可如下求出:式中若式中若i=ni=n则则j=1,j=1,否则否则j=i+1j=i+1。类似地可计算多边形表面在类似地可计算多边形表面在x=0 x=0和和y=0y=0平平面上投
17、影的面积面上投影的面积,从而确定从而确定A,B,A,B,然后然后D D可通过可通过代入平面上一点坐标数值来求出。代入平面上一点坐标数值来求出。于是有于是有S=(y1+y2)(x1-x2)S=(y1+y2)(x1-x2)十十(y2+y3)(x2-x3(y2+y3)(x2-x3)+(y3+y1)(x3-x1)+(y3+y1)(x3-x1)若给出空间若干点的坐标若给出空间若干点的坐标(x1,y1,z1),(x2,y2,z2),.(x1,y1,z1),(x2,y2,z2),.(xn,yn,znxn,yn,zn),),注意这里没有要求这些点共面或围成了凸注意这里没有要求这些点共面或围成了凸多边形多边形,
18、都可以求出通过或接近这些点的都可以求出通过或接近这些点的一个平面方程一个平面方程Ax+By+Cz+DAx+By+Cz+D=0:=0:D=-Ax1-By1-Cz1 D=-Ax1-By1-Cz1 式中若式中若i=n,i=n,则则j=1,j=1,否则否则j=i+1 j=i+1 平面方程的求交平面方程的求交 A1x+B1y+C1z+D1=0A2x+B2y+C2z+D2=0 两平面重合或平行两平面重合或平行,一般算没有交点一般算没有交点 分别对每个多边形表面各边相应分别对每个多边形表面各边相应的线段的线段,计算它与另一个多边形表面所计算它与另一个多边形表面所在平面的交点。注意这里是求线段与在平面的交点。
19、注意这里是求线段与平面的交点平面的交点,即交点在线段延长线上时即交点在线段延长线上时算不相交。假定两个多边形表面都是算不相交。假定两个多边形表面都是凸的凸的,故共可以交出故共可以交出四个交点四个交点。线段与平面的交点计算线段与平面的交点计算 空间线段两个端点的坐标空间线段两个端点的坐标(x1,y1,z1)(x1,y1,z1)和和x2,y2,z2)x2,y2,z2)给出给出,平面方程平面方程Ax+Ax+By+Cz+DBy+Cz+D=0=0。代入平面方程代入平面方程,得得:A(x1+(x2-x1)t)+B(y1+(y2-y1)t)+C(z1+(z2-zl)t)+D=0整理得到整理得到:A(x2-x
20、1)+B(y2-y1)+C(z2-zl)t=-(Ax1+By1+Cz1+D)于是知道于是知道,若若A(x2-x1)+B(y2-y1)+C(z2-z1)=0则所给线段在平面上或与平面平行则所给线段在平面上或与平面平行,没有唯一确没有唯一确定的交点。否则定的交点。否则,交点对应的参数交点对应的参数t可以求出可以求出:第三节第三节 平面中的凸壳算法平面中的凸壳算法 凸壳凸壳 包含一个平面点集的最小凸区域包含一个平面点集的最小凸区域 凸区域指要求区域内任意两点的连凸区域指要求区域内任意两点的连线仍在该区域内。线仍在该区域内。设设S S是平面上是平面上n n个点的集合个点的集合,则则S S的凸的凸壳是一
21、个凸多边形壳是一个凸多边形,它包含所有它包含所有n n点且面点且面积最小。事实上求点集积最小。事实上求点集S S的凸壳就是要在的凸壳就是要在S S中选出壳上的点并排出围成凸多边形的中选出壳上的点并排出围成凸多边形的次序。次序。GrahamGraham扫描算法扫描算法 处理的思路是设想有一处理的思路是设想有一内点内点O O并且不并且不妨设想妨设想O O就是坐标原点就是坐标原点,这时点集这时点集S S中所有各中所有各点相对点相对轴轴OXOX有一个有一个倾角倾角。所有各点按倾角。所有各点按倾角递增排序递增排序后后,如果某一点不是壳上顶点如果某一点不是壳上顶点,则则它必然在两个壳顶点与它必然在两个壳顶
22、点与点点O O形成的三角形内形成的三角形内部。部。GrahamGraham扫描的实质是围绕已经按扫描的实质是围绕已经按 倾倾角角 排序的各顶点进行一次扫描排序的各顶点进行一次扫描,在扫描过在扫描过程中消去在凸壳内部的点程中消去在凸壳内部的点,留下以希望次序留下以希望次序排列的壳顶点。排列的壳顶点。由于是按倾角递增排序由于是按倾角递增排序,可知若连续可知若连续三个顶点三个顶点P P1 1,P,P2 2,P,P3 3是一个是一个“右转右转”,则,则P P2 2是一个应去掉的内点。是一个应去掉的内点。对给出的三点对给出的三点P P1 1,P,P2 2,P P3 3,设它们的设它们的坐标是坐标是(x(
23、x1 1,y,y1 1),(x),(x2 2,y,y2 2),(x),(x3 3,y,y3 3),),这时要这时要判断三点在判断三点在P P2 2处形成一个处形成一个右转右转还是还是左转左转,可以计算下面的行列式可以计算下面的行列式 其中其中给出的是带有正负号的三角形给出的是带有正负号的三角形P P1 1P P2 2P P3 3面面积的积的2 2倍倍,因此若因此若00,则则P P1 1,P,P2 2,P,P3 3是是左转左转;0 0,则是则是右转右转;=0,;=0,则三点共线。则三点共线。实现此算法可选点集实现此算法可选点集S S中中x x坐标最小坐标最小的点为内点的点为内点O O,设想过设想
24、过O O有一条向右的射线有一条向右的射线,对其余各点对其余各点,相对该射线计算倾角然后再相对该射线计算倾角然后再排序。排序。GrahamGraham扫描算法扫描算法1.1.倾角排序倾角排序选出输入点集选出输入点集S S中中x x坐标最小的坐标最小的点点,若这样的点不唯一则再由其中选出若这样的点不唯一则再由其中选出y y坐标最坐标最小的点小的点,设为设为O O。设想有一条从设想有一条从O O向右的射线向右的射线OX,OX,对点集中其余每一点对点集中其余每一点P,P,计算倾角计算倾角POXPOX,再按倾角再按倾角排排序序,得点序列得点序列Q Q1 1=O,Q=O,Q2 2,Q,Q3 3,Q Qn
25、n;2.2.准备扫描准备扫描vQvQ1 1;3.3.扫描扫描若若NEXT(v)QNEXT(v)Q1 1,则循环执行下面操作则循环执行下面操作,至至NEXT(v)=QNEXT(v)=Q1 1时止时止,此时点序列中剩下排成凸多此时点序列中剩下排成凸多边形的壳上顶点边形的壳上顶点,算法结束。算法结束。若三个相继的点若三个相继的点v,NEXT(v),NEXT(NEXT(v)v,NEXT(v),NEXT(NEXT(v)形成形成一个左转一个左转,则则vNEXT(v);vNEXT(v);否则否则,先删除先删除NEXT(v),NEXT(v),再做再做vPRED(v);vPRED(v);NEXT(v)NEXT(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 教案 第五 图形 运算 精品
限制150内