一种冲击力作用下物体毁损过程仿真的方法

文档序号:6559307阅读:304来源:国知局
专利名称:一种冲击力作用下物体毁损过程仿真的方法
技术领域
本发明涉及一种外力冲击作用下毁坏过程实时仿真方法。
背景技术
计算机图形学界在研究物体损毁仿真时,常采用的计算模型主要是基于物理的计算模型和基于过程的计算模型。基于物理的计算模型对物体进行受力分析,并在应力集中的部位判断应力是否超出材料的屈服极限,以此来决定物体断裂面的位置和走向。基于物理的仿真广泛地应用于土木工程领域,通常称为结构仿真。结构仿真可以分为构件荷载变形仿真和结构破坏仿真。结构破坏仿真描述结构倒塌、结构损伤等等破坏过程,与本论文工作的关系比较大。结构破坏仿真中常采用离散单元法,离散单元法是1971年由Cundall提出来的,适用于大变形、不连续问题的求解。离散单元法早期主要用于解决系统的大规模运动,后来经过Voegel、Lorig、Brady等人的发展,很快在边坡、基础巷道稳定等方面得到了应用。Motohiko Hakuno则将离散单元法应用在建筑物倒塌过程的仿真研究中,并将钢筋混凝土结构中的混凝土粗骨料看作是离散单元,而将砂浆看成是连接弹簧,实现了建筑结构的倒塌分析。
与上述方法不同,基于过程的计算模型则以真实断裂为基础事先对断裂建模,然后在断裂发生时将裂纹附着在物体表面。因此,基于过程的建模方法重点在于断裂模型的采集,断裂模型与真实断裂越接近,仿真的效果越好。Aur′elien Martinet等人指出通过手工、基于过程的技术或通过真实世界的裂纹图片,都可对裂纹进行建模。他们将断裂也设计成几何模型,然后与物体模型做布尔运算,从而实现断裂过程的仿真。基于过程的仿真由于不存在复杂的有限元计算和力学计算,因此能够满足实时性要求。
基于过程的仿真模型应用在建筑物这类具有复杂结构的倒塌仿真中能够达到实时性要求。C.Schweier等人在对由地震导致建筑物倒塌的研究中,是在地震结束后通过卫星或数码相机,对倒塌建筑物进行拍照和分析,并建立相应的倒塌模型。但这种倒塌模型的采集方法比较困难,对设备的要求也比较高,不适用于本发明的研究工作。国防科技大学的王林旭博士对建筑物的毁坏模拟进行了比较深入的研究,并创建了一种新的构造三维实体模型的方法。这种方法将物体分成多个五面体体素,体素与体素之间建立力学关系,并在爆炸过程中以随机的方式决定是否发生断裂。由于以随机方式来决定体素间是否分离,所以仿真的效果不尽理想。从实验结果看,建筑物倒塌后形成的碎块都是比较细小的碎片,与实际情况并不相符。
总的来说,无论是简单物体还是复杂物体,采用基于物理的仿真模型都能够得到比较真实的仿真结果,但无法满足实时性要求;而采用基于过程的仿真模型虽然能达到实时,却丧失了逼真度。

发明内容
本发明的技术解决问题克服现有技术的不足,提供一种既能够满足实时性要求,又能够达到逼真度的一种冲击力作用下物体毁损过程仿真的方法。
本发明的技术解决方案一种冲击力作用下物体毁损过程仿真的方法,其特点将复杂物体的破坏效果分解成该物体各个构件的直接破坏和约束破坏的效果的总和,具体步骤如下(1)对复杂物体进行几何建模按照结构力学的要求,将复杂物体分解为多个结构构件,然后为各个构件建立约束关系,这样可以保存物体的结构特征;(2)实现复杂物体中受力构件的直接破坏定义断裂模型,在读入断裂模型后将裂纹附着在构件的表面,最后根据受力方向和裂纹方向生成断裂面从而生成碎块;
(3)实现由于直接破坏而产生的对其他构件的约束破坏首先,根据在建模过程中已经定义好的约束关系寻找当前构件的约束构件,然后根据构件类型的不同,采用不同的破坏算法进行破坏的模拟。
本发明的原理(1)本发明在物体的几何建模中,把物体看成由若干构件组成,且构件和构件之间存在着力学约束关系。传统的物体的建模方法有三种,即线框模型、表面模型和实体模型。三种模型均可在计算机中描述出物体的形状,但是它们所包含的信息量则完全不同。传统几何模型只存储物体几何信息,不能反映复杂物体的物理特性和结构特征,因此不适合实现对物体毁损过程的模拟。在分析传统几何模型的基础上本发明给出了一种适合描述复杂物体模型的方法。复杂物体可以抽象为由构件和约束关系组成。首先要按照结构力学的要求,将复杂物体分解为多个结构构件。接着,为各个构件建立约束关系,这样可以保存物体的结构特征。
(2)直接破坏是由于冲击力直接作用于构件表面,并且超出构件的破坏强度而导致构件破坏的模式。构件的破坏过程可以分成两个部分,一个是构件断裂生成碎块的过程,另一个是碎块坠落的过程。其中,最关键的技术难点是如何在构件受外力作用后,根据作用力的信息生成碎块。早期基于物理的建模方法复杂度很高,很难达到实时性要求。基于过程的建模方法是以真实断裂为基础事先对断裂建模,然后在断裂发生时将裂纹附着在物体表面。基于过程的建模方法能够达到实时性要求,但由于断裂模型是固定的,因此仿真结果往往与事实有相当的出入。
本方法针对上面两种方法的不足,采用基于过程的建模方法实现墙体断裂,但同时增加了力作用点和力方向两个用户可控参数。用户可控参数的增加,使得即使是在同一断裂模型下,更改参数仍可得到接近于实际情况的不同断裂效果。在生成碎块的过程中,根据裂纹和受力的方向来确定断裂面的,断裂面确定后,就可以根据构件内元素与断裂面的位置关系来确定元素应该包含在哪个碎块中。
(3)约束破坏建立在构件约束关系基础之上,引发构件破坏的直接原因不是冲击载荷而是其它构件的破坏。约束破坏中构件的破坏与冲击力的大小、方向及作用点不直接相关,所以就没有必要关注破坏的细节,而应力求算法简单高效,以满足实时性要求。传统离散单元法中,它通过结构力学的分析预测哪一个单元将发生破坏,但并不关心单元破坏后是否会生成碎块,这样仿真的效果不是很理想。本发明提出的约束破坏的方法中,参加运算的则是构件,构件可再分,且约束破坏侧重于构件破坏后是如何生成碎块的。本发明以约束关系决定构件是否会发生约束破坏,而构件破坏后则随机生成碎块,与离散单元法相比,可以实现了高效、逼真的仿真效果。
本发明与现有技术相比的优点在于本发明提出了一种很好的复杂物体的定义方式,不仅存储物体几何信息,还反映复杂物体的物理特性和结构特征;在断裂模型不变的情况下,根据受力点和受力方向的不同,可以产生不同的断裂效果;用构件及约束关系和约束破坏的思想来仿真复杂物体的损毁过程;依据构件类型的不同,分别为它们设计了不同的约束破坏方法,由于考虑了断裂面连贯问题,使仿真效果逼真,同时由于没有采用基于物理的计算过程,计算的复杂度大大降低,满足了实时性的要求。


图1为本发明的复杂物体的破坏原理流程图;图2为本发明的房屋构件的划分;图3为本发明的定义复杂物体的DTD文档;图4为房屋的xml文档表述;图5为本发明的一个完整的断裂模型;图6为本发明的定义断裂模型的XML文件的DTD文档;图7为本发明的图5所定义断裂模型的XML文件;图8为本发明的横承重构件的约束破坏;
图9为本发明系统中主要类图;图10为本发明的复杂物体3个构件时的破坏效果。
具体实施例方式
如图1所示为本发明整个过程的原理流程图,用户首先按照规范定义好物体的模型,在定义模型的xml文档中包括了组成该物体的构件以及各个构件之间的约束关系,在载入模型后如果冲击力大于直接受力构件的强度则先计算直接受力构件的破坏效果,然后查找和此构件存在约束关系的其它构件并计算其约束破坏效果,从而模拟了物体的这个破坏效果,具体实施过程如下(1)对复杂物体进行几何建模,即按照结构力学的要求,将复杂物体分解为多个结构构件,然后为各个构件建立约束关系。
在对复杂物体进行建模的过程中,采用XML文档定义复杂物体的结构,图3给出复杂物体建模的DTD文档,components是由component属性组成,指明了物体是由那些构件组成的,component属性指明了构件的具体定义。constraint-rules属性可以由constraint-component或constraint-rule组成,用来定义约束规则,constraint-component包括id和position两项属性,它直接指明了于当前构件存在约束关系的构件的id号,以及相对于当前构件的位置,constraint-rule由variable,rule组成,它指明了构件的variable属性以及运算规则rule,当其它构件的variable满足该构件的rule时,可认为其与该构件存在约束关系。
下面来看如何用上面的文档来定义复杂的物体首先将复杂物体分成若干个构件组成,如图2所示的房屋的构件,可以用如图4所示的xml文档的components属性来描述,components是由每个构件的component组成的,component定义了该构件的id,type,断裂模型(fracture)及该构件的数据文件;然后定义构件间的约束关系。约束规则可以用两种方式描述一种是直接给出与当前构件存在约束关系的构件标识ID,并给出该构件相对与当前构件的位置关系position,这种位置关系规定为以下八种left、right、rear、front、up、down,如图4的constraints属性就是使用第一种方法来描述如图2所示房屋各个构件间的约束关系;另一种则是采用用户给出约束的运算规则。当构件的某一属性variable满足当前构件的运算规则rule时,该构件即为当前构件的约束构件。当使用这种方法时,要为constraint-rules定义constraint-rule属性而不是第一种所用的constraint-component属性。通过constraint-rule为每个构件定义variable和rule,这样就可以用该构件的rule查找与其存在约束关系的构件。例如,某构件的rule为“<10”,这样其它所有构件只要其variable的值为小于十,就认为它和该构件存在约束关系。
第一种方法适于物体构件数量不多,比如小于20,约束关系比较简单的情况;而第二种方法则适用于构件数量较多,比如大于20,约束关系可以使用运算规则描述的情况。
如图4给出了图2所示的房屋完整的xml定义文件。可以看出,object属性分为components和constraints两大部分,分别表示组成该物体的构件及各个构件之间的约束关系,components包括了若干compo nent属性,每个component描述了该构件的相关信息。constraints由若干constraint-rule组成,约束关系采用了第一种表示方法,即直接记录了与一个构件相关的其它构件的id及position信息。
另外在定义物体的xml文档之前,构件的数据文件首先要经过离散处理,离散成由若干四面体组成的几何模型,离散后生成的构件模型以dat文件的形式存储。在构件component元素的元素体内给出的是描述当前构件几何信息的dat文件的存储路径和名称。如果dat文件与XML文档存储在同一目录下,则直接给出dat文件的名称即可。仿真程序由XML文档中解析出整个物体由哪些构件组成,并通过解析dat文件将整个物体的几何信息全部加载到内存中。
(2)实现复杂物体中受力构件的直接破坏,即对复杂物体定义断裂模型,接着读入定义好的断裂模型,然后将裂纹附着在构件的表面,最后根据裂纹方向和受力方向生成断裂面以生成碎块。
在实现当前受力构件的直接破坏中,首先定义一个断裂模型,如图4所示,是一个完整的断裂模型,为了在模拟计算种中更好的利用该模型,采用如下的方式来存储该模型。图2为定义断裂模型的XML文件的DTD文档,先将断裂模型分为左断裂模型和右断裂模型两部分,然后分别定义各部分上的裂纹的主干和分支上的点,left-cracks和right-cracks分别代表左右断裂模型,crack表示裂纹属性,main和affiliated分别表示裂纹主干和分支上的点。点point有x,y两个坐标值。图3为图1所定义断裂模型,按照图2所示的定义规则,所定义的XML文件。
定义好断裂模型后,当力作用在墙体表面时,就可以根据力作用点及墙体的大小将断裂模型中的裂纹一一附着到墙体表面,其方法是首先求解墙体表面法向量与Z轴正向之间的夹角,得到断裂模型的旋转变换矩阵;然后再根据力的作用点得到断裂模型的平移矩阵;最后求解出力作用点到四个边的距离,然后计算出相应的放缩比例,得到断裂模型的缩放矩阵。
将断裂模型附着到构件上之后,可以根据裂纹和受力的方向确定断裂面,断裂面的法向量为受力方向和裂纹方向的叉乘。断裂面确定后,就可以根据墙体内元素与断裂面的位置关系来确定元素应该包含在哪个碎块中,从而实现断裂的仿真。
在具体实现的过程中,可以通过Reader类的来加载构件模型和断裂模型。然后用Fracture类的transform()把裂纹在附着到构件表面。这样,当前构件所属类的directDamage方法可以进行构件的直接破坏。
(3)实现由于直接破坏而产生的对其他构件(与该构件存在约束关系)的约束破坏,即首先,根据在建模过程中已经定义好的约束关系寻找当前构件的约束构件,然后根据构件类型的不同,采用不同的破坏算法。
在实现构件的约束破坏中,由前面已经定义好的约束关系来寻找当前构件的约束构件,发生约束破坏。根据构件类型的不同,本发明采用3种不同的算法来处理a.在处理非承重构件时,按其粉碎来处理,即直接将该构件的每一个元素作为一个碎块处理;b.在处理纵承重构件时,按随机的方式生成断裂面,然后生成碎块,记录下每一构件残骸的最左侧断裂面和最右侧断裂面,根据约束关系中定义的构件位置关系决定采用哪一个断裂面做为当前构件的断裂面,并以此断裂面将当前构件分成两部分,然后再在构件上半部分进行分裂,以随机的方式生成碎块;c.在设计横承重构件的约束破坏时,如图8所示,矩形ABCD是屋顶俯视图,边AB、AD、CD均为承重墙,而BC则包括了门、窗等非承重构件,是非承重墙。假设墙CD被破坏,沿最左侧断裂面与屋顶交于E点,而沿最右侧断裂面与屋顶交于F点,则线段EF与Y轴相交所形成的平面即为屋顶的断裂面。如果CD的断裂面与屋顶没有交点或交点在断裂面以外,则取BD与Y轴相交所确定的平面为屋顶的断裂面。这种情况发生在墙体断裂面与屋顶平面平行或挖近似平行的时候。同样,AB、AD破坏引发的屋顶破坏也可依据上述方法确定断裂面。在约束破坏确定断裂面后,就可按照直接破坏相应的步骤处理,来实现构件的约束破坏。在实现的过程中,在完成物体的直接破坏之后,可以调用与当前构件有约束关系的构件的constraintDamage方法来实现该构件的约束破坏。
在完成物体的直接破坏和所有约束破坏之后,便完成了对物体毁损过程的仿真。
图9为系统设计的主要类图。Reader类可以载入定义好的模型文件及断裂模型。Fracture类代表断裂模型,属性leftCracks和rightCracks分别表示左裂纹、右裂纹;方法transform()则将裂纹在附着到构件表面。Component类表示构件,有进行约束破坏和直接破坏的方法。Fragment类代表的是构件破坏后生成的碎块,主要的属性与构件类基本相同,而主要方法fall()则实现碎块下落的功能。
如图10所示,为图2所示的房屋的倒塌效果,可以看出,虽然使用了同样的断裂模型,但在冲击力不同时,房屋的破坏效果也是完全不同的,生成的房屋残骸与现实生活较为接近;同时由于没有采用基于物理的计算过程,计算的复杂度大大降低,可以很好的满足实时性。如表1所示在处理器为Pentium(R)4CPU 2.40GHz,内存为512MB,显卡为NVIDIA GeForce4Ti4200的PC机上运行仿真程序时,当物体元素数达到23500多个时,帧频最高仍可达13帧/秒。
表1

权利要求
1.一种冲击力作用下物体毁损过程仿真的方法,其特征在于步骤如下(1)对复杂物体进行几何建模按照结构力学的要求,将复杂物体分解为多个结构构件,然后为各个构件建立约束关系;(2)实现复杂物体中受力构件的直接破坏定义断裂模型,在读入断裂模型后将裂纹附着在构件的表面,最后根据受力方向和裂纹方向生成断裂面从而生成碎块;(3)实现由于直接破坏而产生的对其他构件的约束破坏首先,根据在建模过程中已经定义好的约束关系寻找当前构件的约束构件,然后根据构件类型,采用破坏算法进行破坏的模拟。
2.根据权利要求1所述的冲击力作用下物体毁损过程仿真的方法,其特征在于所述步骤(1)的建立约束关系的方法有两种一种是直接给出与构件存在约束关系的构件标识,同时指明引起约束破坏的构件与当前构件的位置关系;另一种则是根据用户的需要给出约束的运算规则,当构件满足当前构件的运算规则时,即为当前构件的约束构件。
3.根据权利要求1所述的冲击力作用下物体毁损过程仿真的方法,其特征在于所述步骤(2)中裂纹附着在构件的表面的方法是首先求解墙体表面法向量与Z轴正向之间的夹角,得到断裂模型的旋转变换矩阵;然后再根据力的作用点得到断裂模型的平移矩阵;最后求解出力作用点到四个边的距离,然后计算出相应的放缩比例,得到断裂模型的缩放矩阵。
4.根据权利要求1所述的冲击力作用下物体毁损过程仿真的方法,其特征在于所述步骤(3)中采用破坏算法分三种对于非承重构件,采用粉碎的破坏效果;对纵承重构件,随机生成断裂面;对于横承重构件,根据支撑它的纵承重构件的断裂面来决定其断裂面。
全文摘要
一种冲击力作用下物体毁损过程仿真的方法,将复杂物体的破坏效果分解成该物体各个构件的直接破坏和约束破坏的效果的总和,具体步骤(1)对复杂物体进行几何建模,按照结构力学的要求,将复杂物体分解为多个结构构件,然后为各个构件建立约束关系,这样可以保存物体的结构特征;(2)实现复杂物体中受力构件的直接破坏,定义断裂模型,在读入断裂模型后将裂纹附着在构件的表面,最后根据受力方向和裂纹方向生成断裂面从而生成碎块;(3)实现由于直接破坏而产生的对其他构件的约束破坏,首先根据在建模过程中已经定义好的约束关系寻找当前构件的约束构件,然后根据构件类型的不同,采用不同的破坏算法进行破坏的模拟。本发明既能够满足实时性要求,又能够达到逼真度的效果。
文档编号G06T17/00GK1889085SQ20061008978
公开日2007年1月3日 申请日期2006年7月17日 优先权日2006年7月17日
发明者何兵, 唐绍鹏 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1