(1)分层轮廓线的生成
根据排序后的顶点可以得出顶点的最大 z 值和顶点的最小 z 值。分层平面在这个区间进行分层。在图 的数据结构中,数据是用顶点和边的形式存储,分层平面与模型的求交就是平面与边的求交过程。由于边是按照右手螺旋顺序存储,根据边的起点和终点可以方便地找出该边的剩余半边或后序边。在求分层截面的轮廓线时,只需要根据一定的顺序求出平面与各边的交点,连接各交点按顺序输出就是一条封闭的截面轮廓折线。
分层模型图,分层平面与三角面片相交
分层模型图
得出分层平面与边<3,1>的交点后,下一个与分层平面求交的边一定在它的剩余半边<1,3>所在平面内(是它的后序边或者是前接边),然后找到<1,3>的后序边<3,4>。算法判断分层平面是否与<3,4>相交。如果分层平面与<3,4>相交(分层平面是 Z1 平面),下一条与分层平面相交的边一定在它的剩余半边<4,3>所在三角面片上,然后接着查找<4,3>的后序边;如果分层平面与<3,4>不相交(分层平面是 Z2 平面),那么相交的边一定是<3,4>的后序边<4,1>。当求出分层平面与<4,1>的交点后,下一条与分层平面相交的边一定在它的剩余半边<1,4>所在三角面片上,接着查找<1,4>的后序边<4,5>。按照以上方法可以依次求出分层平面与其它边的交点,直到回到起点。
2、快速查找第一条与平面相交边的算法
顶点数据是根据 Z 值从小到大排序的,在分层前这些顶点不必进行分组。首先,在Z 值小于分层截面的顶点数据中取 Z 值最小的顶点。进入该顶点所在链表,依次根据该顶点相关边的信息判断该边是否与分层截面相交。若找到第一条相交边,就标记该边的flag=1,作为一条轮廓线开始的标记,然后利用图 3.5 中的算法求出轮廓线,直到遇到标记 flag=1 边,说明回到了起点,这时修改该边的 flag=0,然后进入下一个分层求轮廓的过程。若是遍历该顶点的所有边都没有交点,该顶点在以后分层求交时不再考虑,选择仅大于该顶点的下一个顶点的边链表,进行边和分层面、边和边的求交。顶点存储时根据 Z 值从小到大有序存储,顶点的选择可以依次进行,不必比较。使用该方法可以减少分层平面与三角面片相交的判断次数,加快了分层速度。这样就可根据从小到大的 Z 值求出每层的轮廓线。
|