第十章 实体造型中的基本算法及特征造型.ppt

第十章 实体造型中的基本算法及特征造型.ppt

第十章 实体造型中的基本算法及特征造型 10.1 概述 10.2 半边数据结构 10.3 欧拉操作 10.4 基本体元的生成 10.5 实体的布尔操作 10.6 特征造型 10.1 概述 10.2 半边数据结构 10.3 欧拉操作 10.4 基本体元的生成 10.5 实体的布尔操作 图10.16 双“on”边 图10.13的例子的最终结果。 A B A的方位代码 B的方位代码 相交位 A1 B1 IN-OUT OUT-IN 1 A1 B2 OUT-OUT IN-IN 0 A2 B2 OUT-IN IN-OUT 1 图10.17 插入空边 利用这些扫描例程,高级欧拉算子的实现是非常直观的。例如,下面程序中的算子mev,在搜索到所需的指针后,简单地调用相应的低级算子lmev来完成其操作。 10.4.1移动掠扫算法 10.4.2 长方体产生的算法 10.4.3 圆柱生成算法 10.4.4以曲线为基的旋转掠扫算法 10.4.1移动掠扫算法 移动掠扫算法使用一个基本平面FACE,并指定一个移动方向(dx,dy,dz)。其中dx,dy,dz分别表示移动距离的三上分量,通过欧拉操作,自动生成一个多面体的半边数据结构 (a) (b) (c) (d) (e) (f) 图10.4 在程序10.1执行过程中,数据结构的逐步生成的示意图 void sweep(fac, dx, dy, dz) Face * fac; Float dx, dy, dz; { Loop * l; HalfEdge*first, *scan; Vertex * v; ? lgetmaxnames(fac-fsolid); l = fac-floops; while(l) { first = l-ledg; / * a * / scan = first-nxt; v =scan-vtx; lmev(scan, scan, ++maxv, v-vcoord[0]+dx, v-vcoord[1]+dy, v-vcoord[2]+dz); / * b * / ? 程序10.1移动掠扫算法 while(scam ! = first) { v = scan-nxt-vtx; lmev(scan-nxt, scan-nxt, ++maxv, v-vcoord[0]+dx, v-vcoord[1]+dy, v-vcoord[2]+dz); / * c * / lmef(scan-prv, scan-nxt-nxt, ++maxf); / * d * / scan = mate(scan-nxt)-nxt; } / * e * / lmef(scan-prv, scan-nxt, ++maxf); l = l-nextl; } } / * end of sweep * / 10.4.2 长方体产生的算法 长方体产生的算法如程序10.2所示。函数block生成一个名为sn,长、宽、高分别为dx,dy,dz的直角六面体。 block 的算法思想是:首先生成一个四边形的面,编号为2。然后将这个面按照0,0,dz的方向调用sweep程序进行移动掠扫,即生成一个长方体的数据结构。 Solid *block(sn, dx, dy, dz) Id sn; Float dx, dy, dz; { Solid * s; ? s = mvfs(sn, l, l, 0.0, 0.0, 0.0); smev(sn, l, l, 2, dx, 0.0, 0.0); smev(sn, l,2, 3, dx, dy, 0.0); smev(sn, l, 3, 4, 0.0, dy, 0.0); smef(sn

文档评论(0)

1亿VIP精品文档

相关文档