膜结构三角网格模型短程线的快速生成算法
发布时间:2021年9月26日 点击数:1822
短程线法是膜结构裁剪分析的重要方法.在广义相对论中,“直线”是使得两点间距离最短的线,故也叫短程线或测地线.因此,可以把短程线看作是直线在弯曲空间中的推广[1].对于可展曲面,短程线在展开后为一条直线;对于不可展曲面,近似展开后短程线可使膜片的边界不产生过大的弓形.因此把短程线作为膜片的边界进行裁剪,即使对复杂的膜表面,也能保证 裁剪后膜 片比较规 整,从而节约 材料[2].如图1所示为两种不同的膜裁剪方法,左图为竖面切割线法,右图为短程线法.从裁剪后的膜材展开图可以看出,短程线法生成的裁剪线明显比竖面切割法要直得多,裁剪后的膜材在节省材料方面比竖面切割法好得多.短程线在索网结构布置上也有重要用途,以短程线为依据来布置交叉索网,可以保证材料发挥最大的力学性能,从而达到节省材料的目的.此外,短程线也可作为空间网格结构中剖分曲面网格的依据.
目前,膜结构裁剪分析主要采用短程线法和竖面切割法,短程线作为裁剪线更加经济美观,因而短程线的算法成为一个热门的研究课题.广义相对论已经推导出了短程线的一般方程(严格地讲是测地线方程,数学上测地线与短程线是两个不同的概念, 只是在区域内相等),它是一个微分方程;对于几类特殊曲面可以直接求解其短程线方程,对于一般的自由曲面则很难求解短程线方程,因此有人提出了用数值方法求解短程线[3],或者采用泛函极值法求解[4].刘建忠等人基于微分几何角度,从测地线上每点的主法线向量与曲面在这点的法线向量平行出发,提出了新的膜面裁剪线算法[5].赵杰等人提出了二次测地线展开法[6].黄世敏等人从有限元平面应力方法出发,提出了适合索加强张拉膜结构的膜片划分与展开方法[7].膜结构在设计软件中一般以三角形膜单元来存储,由此膜结构短程线的求解又可以归结为三角网格上最短路径的求解.在计算机数据结构科学中,已经解决了带权图的任意一对顶点的最短路径问题,最经典的算法当数Dijkstra算法和Floyd算法[8].两种算法可谓是通用算法;但是涉及到遍历操作,对于由三角网格单元存储的膜结构而言,数据量巨大,显得不经济.针对实际问题,相继有人提出了快速的短程线算法或近似短程线算法, 这些算法的实质是减小遍历操作的范围,来提升算法效率.文献[9]提到了“辅助平面”(sub-plane)的概念,也提到了辅助平面上短程线的判定条件,但是提出的算法仍然过于繁琐.
本文从广义相对论的短程线定义出发,提出一种与上述快速算法实质截然不同的新算法.该算法不需要计算最短路径,而把空间问题转换为平面问题来解决,不涉及复杂的数值计算.经验证,该算法稳定性好、效率高,可满足实际工程要求.
1 基本原理
本算法是采用“化曲为直”的思想实现的.广义相对论把短程线看作是直线在弯曲空间中的推广, 可见平面上的直线与曲面上的短程线存在着映射关系.由于直接在曲面上寻找最短路径非常复杂,所以不妨“化曲为直”,把空间曲面问题转化为平面问题, 找到平面上的短程线(即一般意义的直线),再根据映射关系把该平面上找到的短程线转换到原空间曲面上,从而得到曲面上的短程线.
算法的基本思路是:输入短程线的两个端点后, 在曲面上寻找一条连接两个端点的三角形网格带, 该三角带在平面上展开后必须被连接两个端点的直线穿过;根据映射关系把这条直线映射到原曲面上即为短程线.
2 算法步骤
本算法的流程图见图2.下面结合一示例曲面来介绍该算法.
对于示例曲面(图3a),取其局部(图3b).欲求曲面上以A、B两点为端点的短程线,先找到任意一条连接A、B两点的三角形网格带(简称三角带),如图4a所示.把该三角带在平面上展开,方法是:
(1)确定任意一个展开平面(如xy平面),计算展开平面与三角形1的夹角α(如图4b).把三角形1、2、3、4、…、n(n为最后一个三角形)都以CD为轴 (即三角形1与展开平面的交线),旋转α角度,使得三角形1与展开平面平行.旋转的方法是把三角形的顶点与相应的旋转变换矩阵M(α)相乘,并注意旋转变换矩阵M(α)应该以CD为轴,因此它是一个基本平移矩阵T(CD-O)(即把CD轴平移到原点)和基本旋转矩阵R(α)相乘得到的复合变换矩阵,即M=T×R×T-1(基本平移和基本旋转矩阵可以参考计算机图形学教材).此时三角形1已经被展开到了展开平面上,并且三角形2、3、4、…、n已经与三角形1一起进行了相同角度的旋转(图4只画出了前4个三角形).
(2)与上一步类似,计算三角形2与展开平面的夹角β.把三角形2、3、4、…、n都以CE为轴(即三角形2与展开平面的交线),旋转β角度,使得三角形2与展开平面平行.此时三角形2已经被展开到了展开平面上,并且三角形3、4、…、n已经与三角形2一起进行了相同角度的旋转,如图4c所示.
(3)重复步骤(2),直到最后一个三角形n被展开到展开平面上.这样就完成了曲面三角带在平面上的展开,如图4d所示.
把第i个三角形所乘的旋转变换矩阵记为Mi, 则整个展开过程中与三角形1相乘的矩阵为H1= M1,与三角形2相乘的矩阵为H2=M1×M2,与三角形i相乘的矩阵为Hi=M1×M2×…×Mi.需要记录下这些矩阵Hi,因为后续从平面到曲面的还原需要用到它们.
展开后,在平面展开图上连接A、B两点,得到一条直线L.这条直线L就是曲面上的短程线在该平面上的展开.此时得到的展开图可能会出现两种情况:(1)平面展开图上的全部三角 形都被直线L穿过;(2)平面展开图上的部分三角 形未被直线L穿过.两种情况如图5所示.
对于图5a的情况,根据流程图(图2),可直接进行最后一步,根据映射关系得到直线L在曲面上的位置,即为短程线上点的坐标.具体方法如下:
(1)在展开平面上,求得直线AB与各展开后的三角形的交点,如图6a中P′1、P′2、P′3…P′i….
(2)把展开过程中记录的旋转变换矩阵Hi求逆矩阵得Hi-1 ,并与对应的三角形上的交点相乘,可得到展开平面上的交点P′i在原曲面上的点Pi,即Pi=P′i×Hi-1 ,如图6b所示.
此外,由于展开过程并不涉及到对每个三角形网格的缩放拉伸等变形运算,因而P点也可根据P′点在M′N′上的相对位置来确定.
对于图5b的情况,先从选中的三角形中删除未被直线L穿过的三角形,然后查找被删除三角形附近的三角形,要求这些三角形既能形成连接A、B的完整三角形带,又能全部被直线L穿过.查找完成后,按照情况(1)的流程进行操作,即可找到曲面上的短程线.
3 实际算例
以一充气膜交叉加强索网为例,说明短程线算法在实际工程中的百富策略白菜网.在实际工程百富策略白菜网中,充气膜结构的抗风和抗雪性能较差,所以工程上常常在充气膜的外围布置一定数量的拉索,形成膜面与拉索共同承受外力的体系.通过控制膜面和拉索中的内力分布,可以有效地降低膜面应力,增大膜结构的刚度,限制膜结构的变形,避免膜面在强风下出现大面积撕坏,还可以增大充气膜结构的跨度.充气膜的实际工程照 片与模型 图 (三角形膜 单元网格 )如图7所示,充气膜长97m,宽80m,最高点32m.充气膜模型采用索膜结构设计系统SMCAD建立.
按照短程线来布置该充气膜的交叉索网,采用本文算法 以一定规 律生成充 气膜的短 程线,如图8所示.其中,AB边等分为30份,BC边等分为38份,按对角线方向(如M1M2 和N1N2)生成相互交叉的短程线.生成的交叉索网模型如图9所示.
按照此方法确定的拉索是充气膜曲面上的最短长度,可以最大程度地减少拉索的侧向位移,从而减少交叉索网中连接节点的数量,减小连接节点的受力,提高充气膜结构的稳定性和经济性.通过该实际工程验证了本文提出的算法是一种快速稳定的短程线算法,以短程线为路径的交叉索网,可以发挥最大的力学性能,节省材料,经济美观.
4 算法讨论
以上介绍了算法的总体流程,由于篇幅限制,忽略了很多细部问题.针对该算法仍有一些细部问题值得探讨,解决这些问题可再次提升算法的效率.下面列举几例来讨论.
(1)初始三角带的选取
算法流程图(图2)中的第二步,在曲面上查找任意连接两个端点的三角带.由于最终需要找到一条被直线L穿过的三角带,中间需要删除未被穿过的三角形网格并在附近查找符合条件的三角形网格,因此初始三角带的选取至关重要.设想初始三角带如果离真实短程线较远,则要进行很多次的搜索, 故要选取这样一条初始三角带:它既能被快速稳定地定位 又能离短 程线较近.笔者在试 验程序SMCAD中采用的初始三角带查找算法是,先在屏幕坐标系中,连接A、B两点,得到直线H,直线H在屏幕坐标系上直接穿过的三角形即可作为初始三角带.这个算法的特点是查找的效率与视图的视角有关,因此当查找多次还未找到符合条件的三角带时,可终止本次查找,切换视角再次进行.
(2)附近三角形的查找
算法流程图中的第六步,查找附近的三角形构成新的三角带.这里“附近”三角形的查找效率,跟程序的三角形单元的数据结构有关.如果数据结构只是单纯地存储了三角形的顶点和边的编号或者坐标,那么查找附近的三角形很可能会涉及到遍历操作,查找速度必然大减.因此三角形膜单元的数据结构,除了存储基本点和边的坐标或编号信息外,还应该记录一定的索引信息,能直接定位到邻近的三角形.关于三角形网格数据结构,已经有不少计算机图形学专业的 研究成果.笔者在此 推荐采用 “半边法”[10]来存储三角形网格数据,采用面向对象编程可较方便地实现“半边法”.
(3)算法的精度问题
算法流程图中的最后一步,根据映射关系得到直线L在曲面上的对应位置.严格来讲这一步只是得到了直线L与三角带的交点(如P′)在原曲面上的对应点(P),即得到了短程线上的离散点;连接这些点得到的是一条折线,而非光滑曲线,显然不是精确的短程线.但是,三角形膜单元的尺寸与膜结构本身尺寸相比本身已经足够小,经验证已经可以满足实际工程的要求,因此不必再花费运行时间去求解更精确的短程线了.如果确实需要求解精确短程线, 则可在展开图中直线L上除交点外找更多的点,或者采用高次的插值函数来求解最终的短程线.
5 结 论
本文提出了膜结构设计中一种新的短程线算法.短程线法是目前膜结构裁剪的重要方法,探寻一种快速稳定的短程线算法意义重大.本文提出的算法无需复杂的数值计算,不涉及复杂的数学问题,流程图简洁明了,是一种比较适合计算机实现的短程线快速算法.通过优化数据结构,本算法还有较大的提速空间.
















