一种基于能量平衡的柔性体碰撞处理方法

文档序号:6604681阅读:361来源:国知局
专利名称:一种基于能量平衡的柔性体碰撞处理方法
技术领域
本发明涉及柔性体碰撞仿真技术领域,尤其涉及一种基于能量平衡的柔性体碰撞 处理方法。
背景技术
碰撞问题是柔性体仿真的关键问题之一。柔性体碰撞包括两种类型一类是柔性 体与外界物体的碰撞,如衣服与身体的碰撞,桌布与桌子的碰撞;另外一类是由于其柔软的 特性所致,柔性体的不同部分之间有不同运动,不同部分之间会产生自碰撞。而柔性体碰撞问题,特别是柔性体自碰撞问题一直以来都是研究的热点问题,在 近几年的Siggraph等顶级会议期刊中都有相应论文对碰撞的穿透、修复,全局检测等方面 进行了深入的研究。该问题受到研究人员关注的原因有两个方面,一方面碰撞检测和处理 是柔性体模拟速度的瓶颈,在每一个时间步都要对全部的质点进行碰撞判断。另外一方面, 柔性体的柔软特性决定了不仅要判断外界碰撞,同时要处理自碰撞的问题。碰撞问题主要由两大部分组成1.判断物体之间是否发生碰撞,即碰撞检测问题。在碰撞检测过程中同时存在着 如何进行加速的问题。2.检测到碰撞的存在,采取相应的措施避免,即碰撞响应问题。在计算机图形动画、基于物理模型的仿真和机器人规划等领域,碰撞问题受到了 研究人员的广泛关注,针对上述两个方面的研究也得到了一些研究成果。针对柔性体仿真 领域,也存在一系列被广泛引用的研究成果。Provot针对碰撞的基本元素进行研究,提出通过空间划分来加速碰撞检测;将碰 撞的基本元素分为“点_面”碰撞和“线_线”碰撞,并提出了碰撞影响域的概念,通过将一 块碰撞的区域作为一个刚体进行处理,有效处理了自碰撞的一部分问题。本发明的碰撞系统即是在此基础上进行改进。在此之后,BridSon提出了采用冲 量(Impulse)进行处理的思想,同时对于Provot论文中的影响域进行改进,并采用了细分 曲面的方法对柔性体进行进一步细分建模,得到了较好的效果。本发明实施方式综合了这 种刚体碰撞域的碰撞响应和采用冲量的碰撞响应。对于碰撞问题,本发明的方法首先进行空间划分预处理,采用了空间层次包围盒 的方法,将空间划分为各子区域,在每个子区域内进行碰撞检测。所有的碰撞检测都可以分 为两类基本类型,“点一面”检测以及“线一线”检测。针对点面检测,本发明采用了 Provot 的方法,将检测问题转化为向量积,通过求解方程求得碰撞发生的时间。针对“线--线”检测,传统的方法是将两条线是否相交转化为向量积之后转化为 一个三次方程的求解。采取此方法针对一般的方程需要采用穷举或迭代的方法进行,计算 复杂低效。本发明针对此基本问题进行改进,提出了基于相对运动,将线线检测问题转化为 线和四面体相交的问题,从而只需使用经典的线面相交判断算法就可以获得线线检测,而 不需求解三次方程。针对碰撞响应问题,本发明综合采用了约束、冲量以及碰撞影响域的三种碰撞响应处理机制。本发明提出了一种新颖的处理方式,用能量作为平衡控制的元素,使用平衡控制 思想,能够有效抑制碰撞过程中发生的能量突变,增强系统稳定性。通过以上几种措施,本发明柔性体仿真系统能够较好地处理碰撞。

发明内容
为了克服上述缺陷,本发明提出了一种基于能量平衡的柔性体碰撞处理方法,所 述方法包括在空间层次包围盒内部依次进行基于向量积的“点-面”碰撞检测和基于四面体 的“线-线”碰撞检测;当检测到碰撞时,判断碰撞发生的类型如果是柔性体与模拟环境中的刚体模型碰撞,则进行约束碰撞响应处理,在线性 系统中添加碰撞之间的约束;如果是柔性体之间的碰撞,将所检测到的临近碰撞数量与预定值进行比较,如果 所检测到的临近碰撞的数量小于预定值,则进行冲量碰撞处理;如果所检测到的临近碰撞 的数量大于等于预定值,则将邻近的多个碰撞作为统一的刚体域处理,并将刚体域作为一 个碰撞与刚体域外的其它碰撞同时进行冲量碰撞处理;利用能量平衡来控制碰撞响应;所述利用能量平衡来控制碰撞响应具体包括通过能量函数判断线性系统是否处于平衡状态;当线性系统处于平衡状态时,针对压缩弹簧计算扰动位移;进行状态变量的设定,通过碰撞扰动状态变量来管理扰动;根据状态变量,设置线性系统约束的控制矩阵S矩阵和Z矩阵,使用隐式求解方 法,将扰动加入线性系统方程。其中,所述包围盒为基于六面体的包围盒,所述基于六面体的包围盒为能够包围 碰撞体且边平行于坐标轴的最小六面体。其中,基于六面体的包围盒的构造方法为沿碰撞体局部坐标系统的轴向(X,Y, Z),按照由上至下的递归细分方式形成基于包围盒的二叉树;在每一次递归过程中,要求取最小的包围盒,沿所选择的剖分面将碰撞体分为正 负两半,并将所对应的原始几何元素分别归属正、负两边;递归细分一直进行到每一个叶子节点只包容一个原始几何元素为止,具有n个原 始几何元素的包围盒树包含n个非叶子节点和n个叶子节点。其中,基于六面体的包围盒的相交检测方法为两个树A和B之间双重递归遍历的 过程对两棵树A和B,若发现树A根节点的包围盒与树B内部节点的包围盒不相交,则 停止向下遍历;如果遍历能达到树B的叶节点,再用该叶节点遍历树A ;如果能到达树A的 叶节点,则进一步进行基本元素之间的相交测试;根据两个包围盒相交当且仅当它们在三 个坐标轴上的投影区间均相交这一特性,可以将三维求交问题转化为一维求交问题。其中,基于六面体的包围盒的更新方法为当模拟的柔性体发生移动、旋转和变形
5之后,需要对包围盒进行更新,根据包围盒树的定义,可以获得包围盒六面体的8个顶点, 对这8个顶点进行相应旋转和平移变化,并根据变化后的顶点计算新包围盒。其中,碰撞响应机制包括基于约束的碰撞响应,基于冲量的碰撞响应以及基于刚 体动力学影响域的碰撞响应。其中,基于约束的碰撞响应将碰撞检测得到的结果以约束方式加入到线性系统方 程中,限制质点的运动,从而避免了碰撞的产生。其中,基于冲量的碰撞响应通过对碰撞检测得到的节点施加冲量,影响节点速度, 避免碰撞的产生。其中,基于刚体动力学影响域的碰撞响应包括将多个节点合成一个大的区域,在 此区域内的节点互相影响,作为一个统一的刚体进行处理。其中,基于四面体的“线_线”碰撞检测为,根据运动的相对性原理,将碰撞检测转 化为直线与四面体相交的判断。



下面通过参考附图来描述本发明的实施方式,其中图1为本发明实施方式中的碰撞检测的基本元素;图2为本发明实施方式中的边边检测过程中形成的四面体;图3为本发明实施方式中的碰撞部分处理流程;图4为本发明实施方式中的碰撞部分处理流程;
具体实施例方式根据本发明具体实施方式
利用空间层次包围盒来进行碰撞检测。针对刚体的碰撞 问题,主要包括划分空间区域、三角面片检测和响应等方法。现有技术中,最基本的碰撞检测方法要遍历所有的基本点面,速度很慢。在实际处 理中为了提高速度,对最原始的方法进行了简化,总体上分为空间分解法和层次包围盒法。 这两种方法的基本思想都是“分而治之”。本发明中采用了层次包围盒的方法。包围盒方法的基本步骤是通过建立对象的包围盒层次来逐渐逼近对象的几何模 型,从而用体积略大而形状简单的包围盒代替复杂的几何对象参加碰撞检测,先对物体的 包围盒进行粗略检测,当包围盒相交时其包围的几何体才有可能相交;若包围盒不相交,其 包围的几何体一定不相交。利用层次包围盒法可以排除大量不可能相交的几何体和几何部 位,从而快速找到相交的几何部位。包围盒按照其结构形状可以分为球型的包围盒以及立方体的包围盒。具体又 包括包围球、沿坐标轴的包围盒(Axis-Aligned Bound ing Box)、沿任意方向包围盒 OBB (Oriented Bounding Box)、k_D0P 散方向包围盒(Discrete Orientation Polytope)。球形包围盒法(spheres)是一种最简单的碰撞检测法,它是用球形来近似地表示 物体或物体的一部分,然后再判断这些包围球是否相交。这样仅需要测试两个球体中心的 距离是否小于它们的半径和,当小于半径时表示发生了碰撞。如果用中心点距离的平方与 半径和的平方进行比较,效果更好,这样就可以在计算距离时除去拙劣的开方运算。但是, 简单的运算也导致了精确度的降低。
本发明实施方式基于六面体的包围盒进行碰撞检测,即沿坐标轴包围盒AABB(axis-aligned bounding boxes)。本发明所采用的方法简单有效,不需要进行复杂运 算就能够高效获得划分。定义包围盒为能够包围碰撞体且边平行于坐标轴的最小六面体, 因此描述一个包围盒仅需六个标量。首先进行包围盒的构造在构造包围盒时,需沿着碰撞体局部坐标系统的轴向 (X,Y,Z)构造,所以所有的包围盒都有一致的方向。而由此形成的树是基于包围盒的二叉 树,按照由上至下的递归细分方式构造生成。在每一次递归过程中,要求取最小的包围盒, 需沿所选择的剖分面将碰撞体分为正负两半,并将所对应的原始几何元素(如三角面)分 别归属正、负两边,整个递归过程类似于空间二叉剖分,只是每次剖分的对象是包围盒,而 不是空间区域。递归细分一直要进行到每一个叶子节点只包容一个原始几何元素为止,所 以具有η个原始几何元素的包围盒树具有η个非叶子节点和η个叶子节点。然后执行相交检测树之间的碰撞检测是一个双重递归遍历的过程。对两棵树A 和B,若发现树A根节点的包围盒与树B内部节点的包围盒不相交,则停止向下遍历。如果 遍历能达到树B的叶节点,再用该叶节点遍历树Α。如果能到达树A的叶节点,则进一步进 行基本元素之间的相交测试。根据两个包围盒相交当且仅当它们在三个坐标轴上的投影区 间均相交这一特性,可以将三维求交问题转化为一维求交问题。而对一维求交问题,则可采 用Axes Test)法。SAT无需求交计算,只需比较两个包围盒分别在三个轴 向上投影的重叠情况,即可得出相交测试结果,非常简单,最多只需要六次比较运算就可以 完成相交检测。最后进行包围盒更新当模拟的柔性体发生移动、旋转和变形之后,需要对包围盒 进行更新,根据其包围盒树的定义,可以获得其六面体的8个顶点,对这8个顶点进行相应 旋转和平移变化,并根据变化后的顶点计算新包围盒。当模拟柔性体发生变形时,需要重新 计算发生变形的叶节点的包围盒,之后利用变形叶节点新的包围盒来重新计算其父类节点 白勺包围盒。父节点包围盒白勺求法为设 XmaxI ‘ Xminl ‘ Ymaxl' Yminl ‘ Zmaxl, Zminl 禾 Π Xmax2 , Xmin2, Ymax2, Yfflin2, Zfflax2, Zfflin2分别是两个变形叶结点的包围盒,则父节点的包围盒为max (Xmax 1, Xmax2),min (Xminl,Xmin2),max (Ymax 1, Ymax2),min(Yminl, Ymin2), (6-1)max (Zmaxl, Zmax2),min (Zminl, Zmin2)。在对包围盒的更新中,只需要六次比较即可,效率高于重新构建包围盒树。根据本发明具体实施方式
来进行碰撞检测。本发明针对“线_线”检测提出了基于 线段与四面体相交判断的新方法。本发明的柔性体仿真系统中采用质点和弹簧进行连接, 这意味着也提供了模型的三角网格表示。而无论针对自碰撞检测还是与刚体的碰撞检测, 在实现中,最终归结为两种类型的检测,即“点_面”检测和“线_线”检测,这两种类型的 碰撞如图1所示。在本发明的柔性体仿真系统中,为了加速碰撞,采用了上述讨论的层次包围盒方 法,排除了大量不可能发生相交的基本几何元素。仅需要对包围盒相交的点、三角形以及 “线-线”进行检测。同时利用曲率的特征,假设当近邻的三角形夹角较小时,不可能发生 碰撞,只有角度超过阈值才可能碰撞。本实施方式采用的“点_面”检测技术以及提出的 “线-线”检测方法。
本发明具体实施方式
碰撞检测包括基于向量积的点面检测。Provot最早提出 “点_面”的检测方法,之后Bridson在其文章中采用了三角形投影的方法来进行“点_面” 检测。本发明也同样采用了这种“点-面”检测的处理方法。其基本思路如下所述。设P(t)是一个移动的点,其中A(t),B(t),C(t)是三角形, 对应于图1的右侧子图。设
是它们相应的在[t。、t。+At]时间 内的常量速度。可以获得 如果存在碰撞,则点P (t)在三角形ABC (t)内,可获得 但是这个方程是一个非线性的系统。为了求解这个系统,使用另外一种P在三角 形ABC内的表达,
通过表示三角形的法向,即
而尺⑴垂直于三角形ABC所在的平面,因此当发生碰撞时 (6-5)式是一个必要但不充分条件,它只意味着A,B, C和P共面。为了检验是否 发生了碰撞,可以将其代回到方程(6-4),而此时该方程已经是一个线性系统。如果求解得 到多组t,u,V,则只有时间最近的是所需要的结果,以上是“点-面”检测的基本原理,在实 现时可以使用Br ids on给出的方法。此方法能够设定相应的碰撞厚度h,从而使系统更具
鲁棒性。检查一个点。4是否与一个法线为三角形
的距离小于厚度h的方法 如下首先检查点与三角形所在平面的距离
是否小于h。如果是,则将该 点投影到这个平面上,并计算三角形的重心坐标W1, W2,W3
W1+W2+W3=1
方程的目的是在平面上找到一个与^4最近的点
。如果平面上的重心坐标都在区间[_δ、1+δ]内,而且
重心和;的距离小于h,则可以判定点么与三角形& 的距离小于厚度h。其中的设 定是由三角形变长决定的。由此,可以通过求解相应的方程获得系统的求解。本发明具体实施方式
碰撞检测包括基于基于四面体的“线-线”检测。“线-线”检测作为碰撞的基本元素,Provo t根据与“点-面”检测的思想给出了 “线-线”检测的方法,但是此方法需要求解一个三次方程,效率不高。本发明将提出一种更 加高效稳定的“线_线”检测方法。本发明提出了一种新的“线-线”检测方法。将碰撞检测问题转化为简单的四面体 判断问题。由于直线和平面的相交是图形学中的基本操作,算法成熟,而且效率较高,因此 考虑将此问题转化为直线和平面的相交问题。需要说明的是,改进的线线检测方法适用于 动力学过程的碰撞检测,已知当前时刻位置和下一时刻的位移,来判断下一步的碰撞情况。图2显示了两条线的位置关系。AB,⑶是当前时刻t的位置,判断下一个时刻t+At
时AB与⑶是否相交。设t+At时AB点位置变为H,⑶点位置变为⑨。对于线线碰撞,
关键在于判断t时刻AB与⑶的相对位置、t+At时刻I与⑩的相对位置,以及在两条 线段在该时间步内位置变化的过程中可能产生的交叉。根据运动的相对性原理,可以将⑶做为系统的参考系,则AB、⑶之间的相对运动 可以合成为⑶相对静止,其中A' B'是相对于⑶在t+At时的位置,AB运动到A' B'。线段的位移可以表示为平移和旋转的组合,减去⑨相对于CD的平移,并反
向旋转后,即可得到A' B'的位置。在实验中模型的预设弹簧长度相等(此时线段之间 的相对旋转可以表示为顶点位移差的形式),此时A'和B'的位置可以简化为以下公式计 算A' = A+A' C' -AC,(6-6)B' = B+B' D' -BD。(6-7)此处,它们运动的路径在一个时间步内假设为最短的路径。如图2中,A沿直线 AA'运动到A',B沿直线BB'运动到B'。而判断AB和⑶是否在Δ t时间内碰撞的问题 就转化为⑶与AB,A' B'运动过程是否相交。AB,A' B'的端点相连接可以构成一个四 面体,如图2所示。因此问题转化为直线与四面体的相交判断问题。如果CD在ABA' B' 外部,相互之间无相交,则AB和⑶必无碰撞。如果⑶在ABA' B'内部,除了以下几种例 外情况,其他情况CD必然与四面体ABA' B'的两个面相交。几种特殊情况如下⑶在四面体的一个面上(可以无碰撞,不处理)
⑶从一条边经过(如果经过边A ‘ B或AB ‘,则必无碰撞;其他情况有碰撞)⑶过顶点(必有碰撞) ⑶在四面体内部(可以不予处理,因为与⑶连续相接的其他边一定会有一个与 ABA' B'有关系)因而判断CD与哪两个面是否相交即转化为判断CD是否与AB相交。CD与ΔΑΒΑ'禾Π ΔABB'相交,此时CD与AB必定相交。CD与ΔΑ' B' A禾ΠΔΑ' B' B相交,此时CD与AB必定相交。CD与ΔΑΑ' B禾ΠΔΑΑ' B'相交,此时CD与AB必定相交。CD与ΔΒΒ' A禾ΠΔΒΒ' A'相交,此时CD与AB必定相交。CD与ΔΑΒ' A'和ΔΑΒ' B相交,此时CD与AB可以不相交。(首先A —A',之 后B —B',可绕过)CD与ΔΑ' BA和ΔΑ' BB'相交,此时CD与AB可以不相交。(首先B —B',之 后A —A',可绕过)这样可以通过基本的“线-面”相交判断得到线线碰撞检测的结果。而作为柔性 体碰撞检测操作的基本元素,采用本发明方法中提出的线面相交检测则只需做六次基本判 断,将提高碰撞检测的效率。根据本发明具体实施方式
来进行碰撞响应。一般的碰撞响应是对检测得到的碰撞 进行处理,以免发生实际碰撞。本发明将目前已有的三种方法综合应用到碰撞响应中,同时 提出了一种基于能量平衡的控制机制,以减小碰撞时发生的能量突变,增强稳定性。目前有以下四种碰撞响应的方法。基于约束的碰撞响应基于惩罚力的碰撞响应基于冲量的碰撞响应刚体动力学的碰撞响应本发明系统采用了基于约束的碰撞响应,基于冲量的碰撞响应以及刚体动力学影 响域的碰撞响应,并引入了平衡控制机制。本发明实施方式提供基于本发明的柔性体仿真系统的碰撞响应机制。基于约束和惩罚力的碰撞响应1.基于约束的碰撞响应,即是将碰撞检测得到的结果加入到线性系统方程中,限 制质点的运动,从而避免了碰撞的产生。本发明的柔性体仿真系统中采用了这种方法,优点 是不会添加额外的刚度,而且没有额外的阻尼产生。但是从广义上讲这种方法也存在一定 的不足,只能处理点_面的碰撞,无法处理线_线碰撞,因此仅仅通过此方法无法处理自碰 撞检测。需要维护系统的约束,对于大范围模拟的鲁棒性不强。2.基于惩罚力的方法,根据检测结果和实际状态,对检测到会发生碰撞的质点施 加惩罚力,通过修正质点对的速度避免碰撞发生。Terzopouls,Baraff和Bridson采取了 这种方法。这种力在一对柔性体片接近到一定程度时发生作用,针对所有类型的检测都可 以使用。但是这种方法的缺点是鲁棒性不强,无法精确调节碰撞程度,有可能会产生施加力 过大而穿透失稳的现象,因此本发明系统中没有采用这种方法。3.基于冲量方法的碰撞响应
基于冲量的方法考虑所有的运动轨迹,检测相应的碰撞,之后应用冲量方法。本发 明采用了这种方法,通过对碰撞检测得到的节点施加冲量,影响其速度,避免碰撞的产生, 其缺点是有可能收敛速度较慢。采用冲量进行处理是因为在计算过程中无法直接显式地修改每一个质点的速度, 相反可以通过线性插值来设置插值点的速度。假设在一个三角形I1I2I3内部插值
点的速度是
如果一个点在边上的比例系数
是a,则这点的速度为
由此可以确定与碰撞相关的点的速度。
对于冲量的计算,如果在方向巧上需要施加碰撞响应,则通过施加冲量到相应的三角形的 边和质点,之后通过插值来修改其内部其他点的坐标。对于点三角形的情况,假设三角形内部的点x4,其关于三角形的权重系数为Wl,w2, W3,对三角形施加的冲量是I,该点质量为m,/)是需要施加碰撞响应的方向。则可以获得 由此可以通过插值来获得其它点的速度。问题的求解转变为如何求得冲量的问 题。冲量可以采用如下计算方法 其中,
是在方
向f/上的弹簧力,m是质点的质量。冲量可以串行或并行添加,并行添加的缺点是会导致产 生过多的非弹性碰撞。3.基于刚体影响域的碰撞响应碰撞响应的另一个思路是使用刚体动力学进行求解。Provot首次提出了刚体影响 域的概念。即当出现碰撞时,有可能出现连锁反应,即在某一个区域内出现多个碰撞,而系 统如果处理不当则会产生不稳定甚者穿透的现象。刚体影响域的思路是将多个节点合成一 个大的区域,在此区域内的点互相影响,作为一个统一的刚体进行处理。将多个节点合并成一个影响域进行计算。初始影响域的中心
其中f^y是中心的位置, \-Λ 是中心的速度,取各个方向速度的平均。之后节 点的角度冲量可以表示为 其内部3X3张量为 角动量为
,因此新的质点速度为
「01271 然后求得系统的最终状态和位置。由此方法可以将多个碰撞区域内的点合成为一 个区域,并统一按照刚体方式进行处理。本发明系统中综合采用了约束、冲量以及刚体影响域的碰撞响应方式,能够很好 地处理检测到的碰撞。但是仿真系统的能量分析显示,以上几种方式处理碰撞时会产生一 个突变的能量峰值,而能量会影响系统的稳定性,较大突变能量将使系统处于发散不稳定 的危险。本发明实施方式提供柔性体碰撞处理总体流程以及能量平衡控制方法。图3显示 了本发明柔性体仿真系统中碰撞部分的处理流程,给出碰撞处理的层次关系以及能量平衡 控制机制的主要过程。首先,碰撞处理的所有操作都是以空间层次包围盒为组织基础,在其内部依次进 行基于向量积的“点_面”碰撞检测和基于四面体的“线_线”碰撞检测。当检测到碰撞后,需要判断碰撞发生的类型如果是柔性体与模拟环境中的刚体 模型碰撞,则进行约束碰撞响应处理,在线性系统中添加碰撞之间的约束。如果是柔性体之间的碰撞,将所检测到的临近碰撞的数量与预定值进行比较,所 述预定值可以取5-10,本发明实施方式以预定值为5进行描述。如果所检测到的临近碰撞 (临近的碰撞为在一个子包围盒内所检测到的碰撞)的数量小于预定值,则直接进行冲量 碰撞处理。例如,当检测到临近碰撞的数量为0-4(碰撞数量较少)中的一个时,由于碰撞 数量小于预定值5,则将上述碰撞直接进行冲量碰撞处理。如果所检测到的临近碰撞的数量 大于预定值,则将邻近的多个碰撞作为统一的刚体域处理,并将刚体域作为一个碰撞与刚 体域外的其它碰撞同时进行冲量碰撞处理。例如,当检测到的临近碰撞的数量为8 (碰撞数 量较多)时,由于碰撞数量大于预定值5,则首先将这8个碰撞中距离较近的碰撞组成统一的刚体域,然后与刚体域外的其它碰撞同时进行冲量碰撞处理。针对碰撞响应,对碰撞和模拟过程进行了平衡分析和控制。在碰撞处理中也引入了能量平衡机制,目的在于消除动力学模拟过程中由于碰撞所引起的突变能量,而这是系 统不稳定的重要原因之一。在检测到碰撞之后,通过能量准则判断系统是否处于平衡状态, 当系统处于不平衡状态时,对碰撞的点施加约束,利用扰动的原理在系统中添加约束。使其 能量从一个突变的状态稳定地进行下降,达到减小能量突变的目的。研究过程中,对不使用 能量平衡控制的方法与使用本发明方法在本发明柔性体仿真系统中进行测试,结果表明, 不使用此方法会产生系统能量的增加,而使用本方法则会使能量平缓的变化。能量平衡控制的主要思想是根据系统的势能判断系统所处的状态,若系统相对于 其所处状态的任何可能偏离都将违背某个物理定律,则该系统不可能产生任何偏离,即系 统是稳定的。当系统的总势能取极小值时,相应地它所处的平衡状态是稳定的。因此可以 使用能量的变化率来判断系统所处的状态。如图4所示,能量平衡控制碰撞响应主要包括4个主要步骤,通过能量函数判断系 统是否处于平衡状态,当线性系统处于平衡状态时,针对压缩弹簧计算扰动位移,进行状态 变量的设定,通过碰撞扰动状态变量来管理扰动,根据状态变量,设置系统约束的控制矩阵 S矩阵和Z矩阵,使用隐式求解方法,将扰动加入线性系统方程。S矩阵和Z矩阵分别是系 统约束中的控制矩阵。在实现上采用与屈曲控制相似的方法,利用状态变量表示系统各状态,通过能量 函数判断系统是否处于平衡状态,设置约束矩阵S和ζ将扰动加入到系统。由于同时存在 多个碰撞,碰撞能量控制的特殊之处是需要维护管理多个状态变量,而在屈曲模型中则只 使用一个状态变量即可添加扰动。细节上我们设置平衡控制的阈值,即同时最多操作发生 碰撞质点的个数。动态管理各个状态的释放,其中碰撞状态变量i如表1所示。初始时该 状态变量未被使用而设为状态0,当检测到最早的碰撞时,将其加入到状态变量,存储其相 应的质点编号j,按照屈曲模型中的方法计算扰动位移,同时添加相应约束。在之后的时间 步计算系统能量是否达到平衡,如果系统达到平衡则释放该碰撞点的约束以及相应状态变 量。通过这种方式可以管理多个碰撞的平衡,此方法的缺点是由于对能量进行控制,增加系 统稳定性的同时增加了计算量。但是对于目前的硬件条件而言,系统稳定性占据了更重要 的位置。表 权利要求
一种利用能量平衡机制来处理柔性体碰撞的方法,所述方法包括在空间层次包围盒内部依次进行基于向量积的“点-面”碰撞检测和基于四面体的“线-线”碰撞检测;当检测到碰撞时,判断碰撞发生的类型如果是柔性体与模拟环境中的刚体模型碰撞,则进行约束碰撞处理,在线性系统中添加碰撞之间的约束;如果是柔性体之间的碰撞,将所检测到的临近碰撞的数量与预定值进行比较,如果所检测到的临近碰撞的数量小于预定值,则进行冲量碰撞处理;如果所检测到的临近碰撞的数量大于等于预定值,则将邻近的多个碰撞作为统一的刚体域处理,并将刚体域作为一个碰撞与刚体域外的其它碰撞同时进行冲量碰撞处理;利用能量平衡来控制碰撞;所述利用能量平衡来控制碰撞具体包括通过能量函数判断线性系统是否处于平衡状态;当线性系统处于平衡状态时,针对压缩弹簧计算扰动位移;进行状态变量的设定,通过碰撞扰动状态变量来管理扰动;根据状态变量,设置线性系统约束的控制矩阵S矩阵和Z矩阵,使用隐式求解方法,将扰动加入线性系统方程。
2.根据权利要求1所述的方法,其中,所述包围盒为基于六面体的包围盒,所述基于六 面体的包围盒为能够包围碰撞体且边平行于坐标轴的最小六面体。
3.根据权利要求1和2所述的方法,其中,基于六面体的包围盒的构造方法为沿碰 撞体局部坐标系统的轴向(X,Y,Z),按照由上至下的递归细分方式形成基于包围盒的二叉 树;在每一次递归过程中,要求取最小的包围盒,沿所选择的剖分面将碰撞体分为正负两 半,并将所对应的原始几何元素分别归属正、负两边;递归细分一直进行到每一个叶子节点只包容一个原始几何元素为止,具有η个原始几 何元素的包围盒树包含η个非叶子节点和η个叶子节点。
4.根据权利要求2所述的方法,其中,基于六面体的包围盒的相交检测方法为两个树A 和B之间双重递归遍历的过程对两棵树A和B,若发现树A根节点的包围盒与树B内部节点的包围盒不相交,则停止 向下遍历;如果遍历能达到树B的叶节点,再用该叶节点遍历树A ;如果能到达树A的叶节 点,则进一步进行基本元素之间的相交测试;根据两个包围盒相交当且仅当它们在三个坐 标轴上的投影区间均相交这一特性,可以将三维求交问题转化为一维求交问题。
5.根据权利要求2所述的方法,其中,基于六面体的包围盒的更新方法为当模拟的柔 性体发生移动、旋转和变形之后,需要对包围盒进行更新,根据包围盒树的定义,可以获得 包围盒六面体的8个顶点,对这8个顶点进行相应旋转和平移变化,并根据变化后的顶点计 算新包围盒。
6.根据权利要求1所述的方法,其中,碰撞处理包括基于约束的碰撞处理,基于冲量的 碰撞处理以及基于刚体动力学影响域的碰撞处理。
7.根据权利要求6所述的方法,其中,基于约束的碰撞处理将碰撞检测得到的结果以约束方式加入到线性系统方程中,限制质点的运动,从而避免了碰撞的产生。
8.根据权利要求6所述的方法,其中,基于冲量的碰撞处理通过对碰撞检测得到的节 点施加冲量,影响节点速度,避免碰撞的产生。
9.根据权利要求6所述的方法,其中,基于刚体动力学影响域的碰撞处理包括将多个 节点合成一个大的区域,在此区域内的节点互相影响,作为一个统一的刚体进行处理。
10.根据权利要求1所述的方法,其中基于四面体的“线-线”碰撞检测为,根据运动的 相对性原理,将碰撞检测转化为直线与四面体相交的判断。
全文摘要
公开了一种利用能量平衡机制来处理柔性体碰撞的方法,方法包括在空间层次包围盒内部依次进行基于向量积的“点-面”碰撞检测和基于四面体的“线-线”碰撞检测;当检测到碰撞时,判断碰撞发生的类型,分别对柔性体与模拟环境中的刚体模型碰撞和柔性体之间的碰撞进行碰撞处理;利用能量平衡来控制碰撞响应通过能量函数判断系统是否处于平衡状态;当系统处于平衡状态时,针对压缩弹簧计算扰动;进行状态变量的设定,通过扰动状态变量来管理扰动;根据状态变量,设置系统约束的控制矩阵S矩阵和Z矩阵,使用隐式求解方法,将扰动加入线性系统方程。本发明适用于屈曲生成,能够更加有效的提高系统稳定性,处理碰撞并产生柔软体仿真褶皱。
文档编号G06F17/50GK101866386SQ20101020918
公开日2010年10月20日 申请日期2010年6月25日 优先权日2010年6月25日
发明者苑维然, 陈玉君 申请人:杭州维肖软件科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1