專利名稱:一種基于能量平衡的柔性體碰撞處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及柔性體碰撞仿真技術(shù)領(lǐng)域,尤其涉及一種基于能量平衡的柔性體碰撞 處理方法。
背景技術(shù):
碰撞問(wèn)題是柔性體仿真的關(guān)鍵問(wèn)題之一。柔性體碰撞包括兩種類型一類是柔性 體與外界物體的碰撞,如衣服與身體的碰撞,桌布與桌子的碰撞;另外一類是由于其柔軟的 特性所致,柔性體的不同部分之間有不同運(yùn)動(dòng),不同部分之間會(huì)產(chǎn)生自碰撞。而柔性體碰撞問(wèn)題,特別是柔性體自碰撞問(wèn)題一直以來(lái)都是研究的熱點(diǎn)問(wèn)題,在 近幾年的Siggraph等頂級(jí)會(huì)議期刊中都有相應(yīng)論文對(duì)碰撞的穿透、修復(fù),全局檢測(cè)等方面 進(jìn)行了深入的研究。該問(wèn)題受到研究人員關(guān)注的原因有兩個(gè)方面,一方面碰撞檢測(cè)和處理 是柔性體模擬速度的瓶頸,在每一個(gè)時(shí)間步都要對(duì)全部的質(zhì)點(diǎn)進(jìn)行碰撞判斷。另外一方面, 柔性體的柔軟特性決定了不僅要判斷外界碰撞,同時(shí)要處理自碰撞的問(wèn)題。碰撞問(wèn)題主要由兩大部分組成1.判斷物體之間是否發(fā)生碰撞,即碰撞檢測(cè)問(wèn)題。在碰撞檢測(cè)過(guò)程中同時(shí)存在著 如何進(jìn)行加速的問(wèn)題。2.檢測(cè)到碰撞的存在,采取相應(yīng)的措施避免,即碰撞響應(yīng)問(wèn)題。在計(jì)算機(jī)圖形動(dòng)畫、基于物理模型的仿真和機(jī)器人規(guī)劃等領(lǐng)域,碰撞問(wèn)題受到了 研究人員的廣泛關(guān)注,針對(duì)上述兩個(gè)方面的研究也得到了一些研究成果。針對(duì)柔性體仿真 領(lǐng)域,也存在一系列被廣泛引用的研究成果。Provot針對(duì)碰撞的基本元素進(jìn)行研究,提出通過(guò)空間劃分來(lái)加速碰撞檢測(cè);將碰 撞的基本元素分為“點(diǎn)_面”碰撞和“線_線”碰撞,并提出了碰撞影響域的概念,通過(guò)將一 塊碰撞的區(qū)域作為一個(gè)剛體進(jìn)行處理,有效處理了自碰撞的一部分問(wèn)題。本發(fā)明的碰撞系統(tǒng)即是在此基礎(chǔ)上進(jìn)行改進(jìn)。在此之后,BridSon提出了采用沖 量(Impulse)進(jìn)行處理的思想,同時(shí)對(duì)于Provot論文中的影響域進(jìn)行改進(jìn),并采用了細(xì)分 曲面的方法對(duì)柔性體進(jìn)行進(jìn)一步細(xì)分建模,得到了較好的效果。本發(fā)明實(shí)施方式綜合了這 種剛體碰撞域的碰撞響應(yīng)和采用沖量的碰撞響應(yīng)。對(duì)于碰撞問(wèn)題,本發(fā)明的方法首先進(jìn)行空間劃分預(yù)處理,采用了空間層次包圍盒 的方法,將空間劃分為各子區(qū)域,在每個(gè)子區(qū)域內(nèi)進(jìn)行碰撞檢測(cè)。所有的碰撞檢測(cè)都可以分 為兩類基本類型,“點(diǎn)一面”檢測(cè)以及“線一線”檢測(cè)。針對(duì)點(diǎn)面檢測(cè),本發(fā)明采用了 Provot 的方法,將檢測(cè)問(wèn)題轉(zhuǎn)化為向量積,通過(guò)求解方程求得碰撞發(fā)生的時(shí)間。針對(duì)“線--線”檢測(cè),傳統(tǒng)的方法是將兩條線是否相交轉(zhuǎn)化為向量積之后轉(zhuǎn)化為 一個(gè)三次方程的求解。采取此方法針對(duì)一般的方程需要采用窮舉或迭代的方法進(jìn)行,計(jì)算 復(fù)雜低效。本發(fā)明針對(duì)此基本問(wèn)題進(jìn)行改進(jìn),提出了基于相對(duì)運(yùn)動(dòng),將線線檢測(cè)問(wèn)題轉(zhuǎn)化為 線和四面體相交的問(wèn)題,從而只需使用經(jīng)典的線面相交判斷算法就可以獲得線線檢測(cè),而 不需求解三次方程。針對(duì)碰撞響應(yīng)問(wèn)題,本發(fā)明綜合采用了約束、沖量以及碰撞影響域的三種碰撞響應(yīng)處理機(jī)制。本發(fā)明提出了一種新穎的處理方式,用能量作為平衡控制的元素,使用平衡控制 思想,能夠有效抑制碰撞過(guò)程中發(fā)生的能量突變,增強(qiáng)系統(tǒng)穩(wěn)定性。通過(guò)以上幾種措施,本發(fā)明柔性體仿真系統(tǒng)能夠較好地處理碰撞。
發(fā)明內(nèi)容
為了克服上述缺陷,本發(fā)明提出了一種基于能量平衡的柔性體碰撞處理方法,所 述方法包括在空間層次包圍盒內(nèi)部依次進(jìn)行基于向量積的“點(diǎn)-面”碰撞檢測(cè)和基于四面體 的“線-線”碰撞檢測(cè);當(dāng)檢測(cè)到碰撞時(shí),判斷碰撞發(fā)生的類型如果是柔性體與模擬環(huán)境中的剛體模型碰撞,則進(jìn)行約束碰撞響應(yīng)處理,在線性 系統(tǒng)中添加碰撞之間的約束;如果是柔性體之間的碰撞,將所檢測(cè)到的臨近碰撞數(shù)量與預(yù)定值進(jìn)行比較,如果 所檢測(cè)到的臨近碰撞的數(shù)量小于預(yù)定值,則進(jìn)行沖量碰撞處理;如果所檢測(cè)到的臨近碰撞 的數(shù)量大于等于預(yù)定值,則將鄰近的多個(gè)碰撞作為統(tǒng)一的剛體域處理,并將剛體域作為一 個(gè)碰撞與剛體域外的其它碰撞同時(shí)進(jìn)行沖量碰撞處理;利用能量平衡來(lái)控制碰撞響應(yīng);所述利用能量平衡來(lái)控制碰撞響應(yīng)具體包括通過(guò)能量函數(shù)判斷線性系統(tǒng)是否處于平衡狀態(tài);當(dāng)線性系統(tǒng)處于平衡狀態(tài)時(shí),針對(duì)壓縮彈簧計(jì)算擾動(dòng)位移;進(jìn)行狀態(tài)變量的設(shè)定,通過(guò)碰撞擾動(dòng)狀態(tài)變量來(lái)管理擾動(dòng);根據(jù)狀態(tài)變量,設(shè)置線性系統(tǒng)約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方 法,將擾動(dòng)加入線性系統(tǒng)方程。其中,所述包圍盒為基于六面體的包圍盒,所述基于六面體的包圍盒為能夠包圍 碰撞體且邊平行于坐標(biāo)軸的最小六面體。其中,基于六面體的包圍盒的構(gòu)造方法為沿碰撞體局部坐標(biāo)系統(tǒng)的軸向(X,Y, Z),按照由上至下的遞歸細(xì)分方式形成基于包圍盒的二叉樹;在每一次遞歸過(guò)程中,要求取最小的包圍盒,沿所選擇的剖分面將碰撞體分為正 負(fù)兩半,并將所對(duì)應(yīng)的原始幾何元素分別歸屬正、負(fù)兩邊;遞歸細(xì)分一直進(jìn)行到每一個(gè)葉子節(jié)點(diǎn)只包容一個(gè)原始幾何元素為止,具有n個(gè)原 始幾何元素的包圍盒樹包含n個(gè)非葉子節(jié)點(diǎn)和n個(gè)葉子節(jié)點(diǎn)。其中,基于六面體的包圍盒的相交檢測(cè)方法為兩個(gè)樹A和B之間雙重遞歸遍歷的 過(guò)程對(duì)兩棵樹A和B,若發(fā)現(xiàn)樹A根節(jié)點(diǎn)的包圍盒與樹B內(nèi)部節(jié)點(diǎn)的包圍盒不相交,則 停止向下遍歷;如果遍歷能達(dá)到樹B的葉節(jié)點(diǎn),再用該葉節(jié)點(diǎn)遍歷樹A ;如果能到達(dá)樹A的 葉節(jié)點(diǎn),則進(jìn)一步進(jìn)行基本元素之間的相交測(cè)試;根據(jù)兩個(gè)包圍盒相交當(dāng)且僅當(dāng)它們?cè)谌?個(gè)坐標(biāo)軸上的投影區(qū)間均相交這一特性,可以將三維求交問(wèn)題轉(zhuǎn)化為一維求交問(wèn)題。其中,基于六面體的包圍盒的更新方法為當(dāng)模擬的柔性體發(fā)生移動(dòng)、旋轉(zhuǎn)和變形
5之后,需要對(duì)包圍盒進(jìn)行更新,根據(jù)包圍盒樹的定義,可以獲得包圍盒六面體的8個(gè)頂點(diǎn), 對(duì)這8個(gè)頂點(diǎn)進(jìn)行相應(yīng)旋轉(zhuǎn)和平移變化,并根據(jù)變化后的頂點(diǎn)計(jì)算新包圍盒。其中,碰撞響應(yīng)機(jī)制包括基于約束的碰撞響應(yīng),基于沖量的碰撞響應(yīng)以及基于剛 體動(dòng)力學(xué)影響域的碰撞響應(yīng)。其中,基于約束的碰撞響應(yīng)將碰撞檢測(cè)得到的結(jié)果以約束方式加入到線性系統(tǒng)方 程中,限制質(zhì)點(diǎn)的運(yùn)動(dòng),從而避免了碰撞的產(chǎn)生。其中,基于沖量的碰撞響應(yīng)通過(guò)對(duì)碰撞檢測(cè)得到的節(jié)點(diǎn)施加沖量,影響節(jié)點(diǎn)速度, 避免碰撞的產(chǎn)生。其中,基于剛體動(dòng)力學(xué)影響域的碰撞響應(yīng)包括將多個(gè)節(jié)點(diǎn)合成一個(gè)大的區(qū)域,在 此區(qū)域內(nèi)的節(jié)點(diǎn)互相影響,作為一個(gè)統(tǒng)一的剛體進(jìn)行處理。其中,基于四面體的“線_線”碰撞檢測(cè)為,根據(jù)運(yùn)動(dòng)的相對(duì)性原理,將碰撞檢測(cè)轉(zhuǎn) 化為直線與四面體相交的判斷。
下面通過(guò)參考附圖來(lái)描述本發(fā)明的實(shí)施方式,其中圖1為本發(fā)明實(shí)施方式中的碰撞檢測(cè)的基本元素;圖2為本發(fā)明實(shí)施方式中的邊邊檢測(cè)過(guò)程中形成的四面體;圖3為本發(fā)明實(shí)施方式中的碰撞部分處理流程;圖4為本發(fā)明實(shí)施方式中的碰撞部分處理流程;
具體實(shí)施例方式根據(jù)本發(fā)明具體實(shí)施方式
利用空間層次包圍盒來(lái)進(jìn)行碰撞檢測(cè)。針對(duì)剛體的碰撞 問(wèn)題,主要包括劃分空間區(qū)域、三角面片檢測(cè)和響應(yīng)等方法?,F(xiàn)有技術(shù)中,最基本的碰撞檢測(cè)方法要遍歷所有的基本點(diǎn)面,速度很慢。在實(shí)際處 理中為了提高速度,對(duì)最原始的方法進(jìn)行了簡(jiǎn)化,總體上分為空間分解法和層次包圍盒法。 這兩種方法的基本思想都是“分而治之”。本發(fā)明中采用了層次包圍盒的方法。包圍盒方法的基本步驟是通過(guò)建立對(duì)象的包圍盒層次來(lái)逐漸逼近對(duì)象的幾何模 型,從而用體積略大而形狀簡(jiǎn)單的包圍盒代替復(fù)雜的幾何對(duì)象參加碰撞檢測(cè),先對(duì)物體的 包圍盒進(jìn)行粗略檢測(cè),當(dāng)包圍盒相交時(shí)其包圍的幾何體才有可能相交;若包圍盒不相交,其 包圍的幾何體一定不相交。利用層次包圍盒法可以排除大量不可能相交的幾何體和幾何部 位,從而快速找到相交的幾何部位。包圍盒按照其結(jié)構(gòu)形狀可以分為球型的包圍盒以及立方體的包圍盒。具體又 包括包圍球、沿坐標(biāo)軸的包圍盒(Axis-Aligned Bound ing Box)、沿任意方向包圍盒 OBB (Oriented Bounding Box)、k_D0P 散方向包圍盒(Discrete Orientation Polytope)。球形包圍盒法(spheres)是一種最簡(jiǎn)單的碰撞檢測(cè)法,它是用球形來(lái)近似地表示 物體或物體的一部分,然后再判斷這些包圍球是否相交。這樣僅需要測(cè)試兩個(gè)球體中心的 距離是否小于它們的半徑和,當(dāng)小于半徑時(shí)表示發(fā)生了碰撞。如果用中心點(diǎn)距離的平方與 半徑和的平方進(jìn)行比較,效果更好,這樣就可以在計(jì)算距離時(shí)除去拙劣的開方運(yùn)算。但是, 簡(jiǎn)單的運(yùn)算也導(dǎo)致了精確度的降低。
本發(fā)明實(shí)施方式基于六面體的包圍盒進(jìn)行碰撞檢測(cè),即沿坐標(biāo)軸包圍盒AABB(axis-aligned bounding boxes)。本發(fā)明所采用的方法簡(jiǎn)單有效,不需要進(jìn)行復(fù)雜運(yùn) 算就能夠高效獲得劃分。定義包圍盒為能夠包圍碰撞體且邊平行于坐標(biāo)軸的最小六面體, 因此描述一個(gè)包圍盒僅需六個(gè)標(biāo)量。首先進(jìn)行包圍盒的構(gòu)造在構(gòu)造包圍盒時(shí),需沿著碰撞體局部坐標(biāo)系統(tǒng)的軸向 (X,Y,Z)構(gòu)造,所以所有的包圍盒都有一致的方向。而由此形成的樹是基于包圍盒的二叉 樹,按照由上至下的遞歸細(xì)分方式構(gòu)造生成。在每一次遞歸過(guò)程中,要求取最小的包圍盒, 需沿所選擇的剖分面將碰撞體分為正負(fù)兩半,并將所對(duì)應(yīng)的原始幾何元素(如三角面)分 別歸屬正、負(fù)兩邊,整個(gè)遞歸過(guò)程類似于空間二叉剖分,只是每次剖分的對(duì)象是包圍盒,而 不是空間區(qū)域。遞歸細(xì)分一直要進(jìn)行到每一個(gè)葉子節(jié)點(diǎn)只包容一個(gè)原始幾何元素為止,所 以具有η個(gè)原始幾何元素的包圍盒樹具有η個(gè)非葉子節(jié)點(diǎn)和η個(gè)葉子節(jié)點(diǎn)。然后執(zhí)行相交檢測(cè)樹之間的碰撞檢測(cè)是一個(gè)雙重遞歸遍歷的過(guò)程。對(duì)兩棵樹A 和B,若發(fā)現(xiàn)樹A根節(jié)點(diǎn)的包圍盒與樹B內(nèi)部節(jié)點(diǎn)的包圍盒不相交,則停止向下遍歷。如果 遍歷能達(dá)到樹B的葉節(jié)點(diǎn),再用該葉節(jié)點(diǎn)遍歷樹Α。如果能到達(dá)樹A的葉節(jié)點(diǎn),則進(jìn)一步進(jìn) 行基本元素之間的相交測(cè)試。根據(jù)兩個(gè)包圍盒相交當(dāng)且僅當(dāng)它們?cè)谌齻€(gè)坐標(biāo)軸上的投影區(qū) 間均相交這一特性,可以將三維求交問(wèn)題轉(zhuǎn)化為一維求交問(wèn)題。而對(duì)一維求交問(wèn)題,則可采 用Axes Test)法。SAT無(wú)需求交計(jì)算,只需比較兩個(gè)包圍盒分別在三個(gè)軸 向上投影的重疊情況,即可得出相交測(cè)試結(jié)果,非常簡(jiǎn)單,最多只需要六次比較運(yùn)算就可以 完成相交檢測(cè)。最后進(jìn)行包圍盒更新當(dāng)模擬的柔性體發(fā)生移動(dòng)、旋轉(zhuǎn)和變形之后,需要對(duì)包圍盒 進(jìn)行更新,根據(jù)其包圍盒樹的定義,可以獲得其六面體的8個(gè)頂點(diǎn),對(duì)這8個(gè)頂點(diǎn)進(jìn)行相應(yīng) 旋轉(zhuǎn)和平移變化,并根據(jù)變化后的頂點(diǎn)計(jì)算新包圍盒。當(dāng)模擬柔性體發(fā)生變形時(shí),需要重新 計(jì)算發(fā)生變形的葉節(jié)點(diǎn)的包圍盒,之后利用變形葉節(jié)點(diǎn)新的包圍盒來(lái)重新計(jì)算其父類節(jié)點(diǎn) 白勺包圍盒。父節(jié)點(diǎn)包圍盒白勺求法為設(shè) XmaxI ‘ Xminl ‘ Ymaxl' Yminl ‘ Zmaxl, Zminl 禾 Π Xmax2 , Xmin2, Ymax2, Yfflin2, Zfflax2, Zfflin2分別是兩個(gè)變形葉結(jié)點(diǎn)的包圍盒,則父節(jié)點(diǎn)的包圍盒為max (Xmax 1, Xmax2),min (Xminl,Xmin2),max (Ymax 1, Ymax2),min(Yminl, Ymin2), (6-1)max (Zmaxl, Zmax2),min (Zminl, Zmin2)。在對(duì)包圍盒的更新中,只需要六次比較即可,效率高于重新構(gòu)建包圍盒樹。根據(jù)本發(fā)明具體實(shí)施方式
來(lái)進(jìn)行碰撞檢測(cè)。本發(fā)明針對(duì)“線_線”檢測(cè)提出了基于 線段與四面體相交判斷的新方法。本發(fā)明的柔性體仿真系統(tǒng)中采用質(zhì)點(diǎn)和彈簧進(jìn)行連接, 這意味著也提供了模型的三角網(wǎng)格表示。而無(wú)論針對(duì)自碰撞檢測(cè)還是與剛體的碰撞檢測(cè), 在實(shí)現(xiàn)中,最終歸結(jié)為兩種類型的檢測(cè),即“點(diǎn)_面”檢測(cè)和“線_線”檢測(cè),這兩種類型的 碰撞如圖1所示。在本發(fā)明的柔性體仿真系統(tǒng)中,為了加速碰撞,采用了上述討論的層次包圍盒方 法,排除了大量不可能發(fā)生相交的基本幾何元素。僅需要對(duì)包圍盒相交的點(diǎn)、三角形以及 “線-線”進(jìn)行檢測(cè)。同時(shí)利用曲率的特征,假設(shè)當(dāng)近鄰的三角形夾角較小時(shí),不可能發(fā)生 碰撞,只有角度超過(guò)閾值才可能碰撞。本實(shí)施方式采用的“點(diǎn)_面”檢測(cè)技術(shù)以及提出的 “線-線”檢測(cè)方法。
本發(fā)明具體實(shí)施方式
碰撞檢測(cè)包括基于向量積的點(diǎn)面檢測(cè)。Provot最早提出 “點(diǎn)_面”的檢測(cè)方法,之后Bridson在其文章中采用了三角形投影的方法來(lái)進(jìn)行“點(diǎn)_面” 檢測(cè)。本發(fā)明也同樣采用了這種“點(diǎn)-面”檢測(cè)的處理方法。其基本思路如下所述。設(shè)P(t)是一個(gè)移動(dòng)的點(diǎn),其中A(t),B(t),C(t)是三角形, 對(duì)應(yīng)于圖1的右側(cè)子圖。設(shè)
是它們相應(yīng)的在[t。、t。+At]時(shí)間 內(nèi)的常量速度。可以獲得 如果存在碰撞,則點(diǎn)P (t)在三角形ABC (t)內(nèi),可獲得 但是這個(gè)方程是一個(gè)非線性的系統(tǒng)。為了求解這個(gè)系統(tǒng),使用另外一種P在三角 形ABC內(nèi)的表達(dá),
通過(guò)表示三角形的法向,即
而尺⑴垂直于三角形ABC所在的平面,因此當(dāng)發(fā)生碰撞時(shí) (6-5)式是一個(gè)必要但不充分條件,它只意味著A,B, C和P共面。為了檢驗(yàn)是否 發(fā)生了碰撞,可以將其代回到方程(6-4),而此時(shí)該方程已經(jīng)是一個(gè)線性系統(tǒng)。如果求解得 到多組t,u,V,則只有時(shí)間最近的是所需要的結(jié)果,以上是“點(diǎn)-面”檢測(cè)的基本原理,在實(shí) 現(xiàn)時(shí)可以使用Br ids on給出的方法。此方法能夠設(shè)定相應(yīng)的碰撞厚度h,從而使系統(tǒng)更具
魯棒性。檢查一個(gè)點(diǎn)。4是否與一個(gè)法線為三角形
的距離小于厚度h的方法 如下首先檢查點(diǎn)與三角形所在平面的距離
是否小于h。如果是,則將該 點(diǎn)投影到這個(gè)平面上,并計(jì)算三角形的重心坐標(biāo)W1, W2,W3
W1+W2+W3=1
方程的目的是在平面上找到一個(gè)與^4最近的點(diǎn)
。如果平面上的重心坐標(biāo)都在區(qū)間[_δ、1+δ]內(nèi),而且
重心和;的距離小于h,則可以判定點(diǎn)么與三角形& 的距離小于厚度h。其中的設(shè) 定是由三角形變長(zhǎng)決定的。由此,可以通過(guò)求解相應(yīng)的方程獲得系統(tǒng)的求解。本發(fā)明具體實(shí)施方式
碰撞檢測(cè)包括基于基于四面體的“線-線”檢測(cè)?!熬€-線”檢測(cè)作為碰撞的基本元素,Provo t根據(jù)與“點(diǎn)-面”檢測(cè)的思想給出了 “線-線”檢測(cè)的方法,但是此方法需要求解一個(gè)三次方程,效率不高。本發(fā)明將提出一種更 加高效穩(wěn)定的“線_線”檢測(cè)方法。本發(fā)明提出了一種新的“線-線”檢測(cè)方法。將碰撞檢測(cè)問(wèn)題轉(zhuǎn)化為簡(jiǎn)單的四面體 判斷問(wèn)題。由于直線和平面的相交是圖形學(xué)中的基本操作,算法成熟,而且效率較高,因此 考慮將此問(wèn)題轉(zhuǎn)化為直線和平面的相交問(wèn)題。需要說(shuō)明的是,改進(jìn)的線線檢測(cè)方法適用于 動(dòng)力學(xué)過(guò)程的碰撞檢測(cè),已知當(dāng)前時(shí)刻位置和下一時(shí)刻的位移,來(lái)判斷下一步的碰撞情況。圖2顯示了兩條線的位置關(guān)系。AB,⑶是當(dāng)前時(shí)刻t的位置,判斷下一個(gè)時(shí)刻t+At
時(shí)AB與⑶是否相交。設(shè)t+At時(shí)AB點(diǎn)位置變?yōu)镠,⑶點(diǎn)位置變?yōu)棰?。?duì)于線線碰撞,
關(guān)鍵在于判斷t時(shí)刻AB與⑶的相對(duì)位置、t+At時(shí)刻I與⑩的相對(duì)位置,以及在兩條 線段在該時(shí)間步內(nèi)位置變化的過(guò)程中可能產(chǎn)生的交叉。根據(jù)運(yùn)動(dòng)的相對(duì)性原理,可以將⑶做為系統(tǒng)的參考系,則AB、⑶之間的相對(duì)運(yùn)動(dòng) 可以合成為⑶相對(duì)靜止,其中A' B'是相對(duì)于⑶在t+At時(shí)的位置,AB運(yùn)動(dòng)到A' B'。線段的位移可以表示為平移和旋轉(zhuǎn)的組合,減去⑨相對(duì)于CD的平移,并反
向旋轉(zhuǎn)后,即可得到A' B'的位置。在實(shí)驗(yàn)中模型的預(yù)設(shè)彈簧長(zhǎng)度相等(此時(shí)線段之間 的相對(duì)旋轉(zhuǎn)可以表示為頂點(diǎn)位移差的形式),此時(shí)A'和B'的位置可以簡(jiǎn)化為以下公式計(jì) 算A' = A+A' C' -AC,(6-6)B' = B+B' D' -BD。(6-7)此處,它們運(yùn)動(dòng)的路徑在一個(gè)時(shí)間步內(nèi)假設(shè)為最短的路徑。如圖2中,A沿直線 AA'運(yùn)動(dòng)到A',B沿直線BB'運(yùn)動(dòng)到B'。而判斷AB和⑶是否在Δ t時(shí)間內(nèi)碰撞的問(wèn)題 就轉(zhuǎn)化為⑶與AB,A' B'運(yùn)動(dòng)過(guò)程是否相交。AB,A' B'的端點(diǎn)相連接可以構(gòu)成一個(gè)四 面體,如圖2所示。因此問(wèn)題轉(zhuǎn)化為直線與四面體的相交判斷問(wèn)題。如果CD在ABA' B' 外部,相互之間無(wú)相交,則AB和⑶必?zé)o碰撞。如果⑶在ABA' B'內(nèi)部,除了以下幾種例 外情況,其他情況CD必然與四面體ABA' B'的兩個(gè)面相交。幾種特殊情況如下⑶在四面體的一個(gè)面上(可以無(wú)碰撞,不處理)
⑶從一條邊經(jīng)過(guò)(如果經(jīng)過(guò)邊A ‘ B或AB ‘,則必?zé)o碰撞;其他情況有碰撞)⑶過(guò)頂點(diǎn)(必有碰撞) ⑶在四面體內(nèi)部(可以不予處理,因?yàn)榕c⑶連續(xù)相接的其他邊一定會(huì)有一個(gè)與 ABA' B'有關(guān)系)因而判斷CD與哪兩個(gè)面是否相交即轉(zhuǎn)化為判斷CD是否與AB相交。CD與ΔΑΒΑ'禾Π ΔABB'相交,此時(shí)CD與AB必定相交。CD與ΔΑ' B' A禾ΠΔΑ' B' B相交,此時(shí)CD與AB必定相交。CD與ΔΑΑ' B禾ΠΔΑΑ' B'相交,此時(shí)CD與AB必定相交。CD與ΔΒΒ' A禾ΠΔΒΒ' A'相交,此時(shí)CD與AB必定相交。CD與ΔΑΒ' A'和ΔΑΒ' B相交,此時(shí)CD與AB可以不相交。(首先A —A',之 后B —B',可繞過(guò))CD與ΔΑ' BA和ΔΑ' BB'相交,此時(shí)CD與AB可以不相交。(首先B —B',之 后A —A',可繞過(guò))這樣可以通過(guò)基本的“線-面”相交判斷得到線線碰撞檢測(cè)的結(jié)果。而作為柔性 體碰撞檢測(cè)操作的基本元素,采用本發(fā)明方法中提出的線面相交檢測(cè)則只需做六次基本判 斷,將提高碰撞檢測(cè)的效率。根據(jù)本發(fā)明具體實(shí)施方式
來(lái)進(jìn)行碰撞響應(yīng)。一般的碰撞響應(yīng)是對(duì)檢測(cè)得到的碰撞 進(jìn)行處理,以免發(fā)生實(shí)際碰撞。本發(fā)明將目前已有的三種方法綜合應(yīng)用到碰撞響應(yīng)中,同時(shí) 提出了一種基于能量平衡的控制機(jī)制,以減小碰撞時(shí)發(fā)生的能量突變,增強(qiáng)穩(wěn)定性。目前有以下四種碰撞響應(yīng)的方法?;诩s束的碰撞響應(yīng)基于懲罰力的碰撞響應(yīng)基于沖量的碰撞響應(yīng)剛體動(dòng)力學(xué)的碰撞響應(yīng)本發(fā)明系統(tǒng)采用了基于約束的碰撞響應(yīng),基于沖量的碰撞響應(yīng)以及剛體動(dòng)力學(xué)影 響域的碰撞響應(yīng),并引入了平衡控制機(jī)制。本發(fā)明實(shí)施方式提供基于本發(fā)明的柔性體仿真系統(tǒng)的碰撞響應(yīng)機(jī)制?;诩s束和懲罰力的碰撞響應(yīng)1.基于約束的碰撞響應(yīng),即是將碰撞檢測(cè)得到的結(jié)果加入到線性系統(tǒng)方程中,限 制質(zhì)點(diǎn)的運(yùn)動(dòng),從而避免了碰撞的產(chǎn)生。本發(fā)明的柔性體仿真系統(tǒng)中采用了這種方法,優(yōu)點(diǎn) 是不會(huì)添加額外的剛度,而且沒有額外的阻尼產(chǎn)生。但是從廣義上講這種方法也存在一定 的不足,只能處理點(diǎn)_面的碰撞,無(wú)法處理線_線碰撞,因此僅僅通過(guò)此方法無(wú)法處理自碰 撞檢測(cè)。需要維護(hù)系統(tǒng)的約束,對(duì)于大范圍模擬的魯棒性不強(qiáng)。2.基于懲罰力的方法,根據(jù)檢測(cè)結(jié)果和實(shí)際狀態(tài),對(duì)檢測(cè)到會(huì)發(fā)生碰撞的質(zhì)點(diǎn)施 加懲罰力,通過(guò)修正質(zhì)點(diǎn)對(duì)的速度避免碰撞發(fā)生。Terzopouls,Baraff和Bridson采取了 這種方法。這種力在一對(duì)柔性體片接近到一定程度時(shí)發(fā)生作用,針對(duì)所有類型的檢測(cè)都可 以使用。但是這種方法的缺點(diǎn)是魯棒性不強(qiáng),無(wú)法精確調(diào)節(jié)碰撞程度,有可能會(huì)產(chǎn)生施加力 過(guò)大而穿透失穩(wěn)的現(xiàn)象,因此本發(fā)明系統(tǒng)中沒有采用這種方法。3.基于沖量方法的碰撞響應(yīng)
基于沖量的方法考慮所有的運(yùn)動(dòng)軌跡,檢測(cè)相應(yīng)的碰撞,之后應(yīng)用沖量方法。本發(fā) 明采用了這種方法,通過(guò)對(duì)碰撞檢測(cè)得到的節(jié)點(diǎn)施加沖量,影響其速度,避免碰撞的產(chǎn)生, 其缺點(diǎn)是有可能收斂速度較慢。采用沖量進(jìn)行處理是因?yàn)樵谟?jì)算過(guò)程中無(wú)法直接顯式地修改每一個(gè)質(zhì)點(diǎn)的速度, 相反可以通過(guò)線性插值來(lái)設(shè)置插值點(diǎn)的速度。假設(shè)在一個(gè)三角形I1I2I3內(nèi)部插值
點(diǎn)的速度是
如果一個(gè)點(diǎn)在邊上的比例系數(shù)
是a,則這點(diǎn)的速度為
由此可以確定與碰撞相關(guān)的點(diǎn)的速度。
對(duì)于沖量的計(jì)算,如果在方向巧上需要施加碰撞響應(yīng),則通過(guò)施加沖量到相應(yīng)的三角形的 邊和質(zhì)點(diǎn),之后通過(guò)插值來(lái)修改其內(nèi)部其他點(diǎn)的坐標(biāo)。對(duì)于點(diǎn)三角形的情況,假設(shè)三角形內(nèi)部的點(diǎn)x4,其關(guān)于三角形的權(quán)重系數(shù)為Wl,w2, W3,對(duì)三角形施加的沖量是I,該點(diǎn)質(zhì)量為m,/)是需要施加碰撞響應(yīng)的方向。則可以獲得 由此可以通過(guò)插值來(lái)獲得其它點(diǎn)的速度。問(wèn)題的求解轉(zhuǎn)變?yōu)槿绾吻蟮脹_量的問(wèn) 題。沖量可以采用如下計(jì)算方法 其中,
是在方
向f/上的彈簧力,m是質(zhì)點(diǎn)的質(zhì)量。沖量可以串行或并行添加,并行添加的缺點(diǎn)是會(huì)導(dǎo)致產(chǎn) 生過(guò)多的非彈性碰撞。3.基于剛體影響域的碰撞響應(yīng)碰撞響應(yīng)的另一個(gè)思路是使用剛體動(dòng)力學(xué)進(jìn)行求解。Provot首次提出了剛體影響 域的概念。即當(dāng)出現(xiàn)碰撞時(shí),有可能出現(xiàn)連鎖反應(yīng),即在某一個(gè)區(qū)域內(nèi)出現(xiàn)多個(gè)碰撞,而系 統(tǒng)如果處理不當(dāng)則會(huì)產(chǎn)生不穩(wěn)定甚者穿透的現(xiàn)象。剛體影響域的思路是將多個(gè)節(jié)點(diǎn)合成一 個(gè)大的區(qū)域,在此區(qū)域內(nèi)的點(diǎn)互相影響,作為一個(gè)統(tǒng)一的剛體進(jìn)行處理。將多個(gè)節(jié)點(diǎn)合并成一個(gè)影響域進(jìn)行計(jì)算。初始影響域的中心
其中f^y是中心的位置, \-Λ 是中心的速度,取各個(gè)方向速度的平均。之后節(jié) 點(diǎn)的角度沖量可以表示為 其內(nèi)部3X3張量為 角動(dòng)量為
,因此新的質(zhì)點(diǎn)速度為
「01271 然后求得系統(tǒng)的最終狀態(tài)和位置。由此方法可以將多個(gè)碰撞區(qū)域內(nèi)的點(diǎn)合成為一 個(gè)區(qū)域,并統(tǒng)一按照剛體方式進(jìn)行處理。本發(fā)明系統(tǒng)中綜合采用了約束、沖量以及剛體影響域的碰撞響應(yīng)方式,能夠很好 地處理檢測(cè)到的碰撞。但是仿真系統(tǒng)的能量分析顯示,以上幾種方式處理碰撞時(shí)會(huì)產(chǎn)生一 個(gè)突變的能量峰值,而能量會(huì)影響系統(tǒng)的穩(wěn)定性,較大突變能量將使系統(tǒng)處于發(fā)散不穩(wěn)定 的危險(xiǎn)。本發(fā)明實(shí)施方式提供柔性體碰撞處理總體流程以及能量平衡控制方法。圖3顯示 了本發(fā)明柔性體仿真系統(tǒng)中碰撞部分的處理流程,給出碰撞處理的層次關(guān)系以及能量平衡 控制機(jī)制的主要過(guò)程。首先,碰撞處理的所有操作都是以空間層次包圍盒為組織基礎(chǔ),在其內(nèi)部依次進(jìn) 行基于向量積的“點(diǎn)_面”碰撞檢測(cè)和基于四面體的“線_線”碰撞檢測(cè)。當(dāng)檢測(cè)到碰撞后,需要判斷碰撞發(fā)生的類型如果是柔性體與模擬環(huán)境中的剛體 模型碰撞,則進(jìn)行約束碰撞響應(yīng)處理,在線性系統(tǒng)中添加碰撞之間的約束。如果是柔性體之間的碰撞,將所檢測(cè)到的臨近碰撞的數(shù)量與預(yù)定值進(jìn)行比較,所 述預(yù)定值可以取5-10,本發(fā)明實(shí)施方式以預(yù)定值為5進(jìn)行描述。如果所檢測(cè)到的臨近碰撞 (臨近的碰撞為在一個(gè)子包圍盒內(nèi)所檢測(cè)到的碰撞)的數(shù)量小于預(yù)定值,則直接進(jìn)行沖量 碰撞處理。例如,當(dāng)檢測(cè)到臨近碰撞的數(shù)量為0-4(碰撞數(shù)量較少)中的一個(gè)時(shí),由于碰撞 數(shù)量小于預(yù)定值5,則將上述碰撞直接進(jìn)行沖量碰撞處理。如果所檢測(cè)到的臨近碰撞的數(shù)量 大于預(yù)定值,則將鄰近的多個(gè)碰撞作為統(tǒng)一的剛體域處理,并將剛體域作為一個(gè)碰撞與剛 體域外的其它碰撞同時(shí)進(jìn)行沖量碰撞處理。例如,當(dāng)檢測(cè)到的臨近碰撞的數(shù)量為8 (碰撞數(shù) 量較多)時(shí),由于碰撞數(shù)量大于預(yù)定值5,則首先將這8個(gè)碰撞中距離較近的碰撞組成統(tǒng)一的剛體域,然后與剛體域外的其它碰撞同時(shí)進(jìn)行沖量碰撞處理。針對(duì)碰撞響應(yīng),對(duì)碰撞和模擬過(guò)程進(jìn)行了平衡分析和控制。在碰撞處理中也引入了能量平衡機(jī)制,目的在于消除動(dòng)力學(xué)模擬過(guò)程中由于碰撞所引起的突變能量,而這是系 統(tǒng)不穩(wěn)定的重要原因之一。在檢測(cè)到碰撞之后,通過(guò)能量準(zhǔn)則判斷系統(tǒng)是否處于平衡狀態(tài), 當(dāng)系統(tǒng)處于不平衡狀態(tài)時(shí),對(duì)碰撞的點(diǎn)施加約束,利用擾動(dòng)的原理在系統(tǒng)中添加約束。使其 能量從一個(gè)突變的狀態(tài)穩(wěn)定地進(jìn)行下降,達(dá)到減小能量突變的目的。研究過(guò)程中,對(duì)不使用 能量平衡控制的方法與使用本發(fā)明方法在本發(fā)明柔性體仿真系統(tǒng)中進(jìn)行測(cè)試,結(jié)果表明, 不使用此方法會(huì)產(chǎn)生系統(tǒng)能量的增加,而使用本方法則會(huì)使能量平緩的變化。能量平衡控制的主要思想是根據(jù)系統(tǒng)的勢(shì)能判斷系統(tǒng)所處的狀態(tài),若系統(tǒng)相對(duì)于 其所處狀態(tài)的任何可能偏離都將違背某個(gè)物理定律,則該系統(tǒng)不可能產(chǎn)生任何偏離,即系 統(tǒng)是穩(wěn)定的。當(dāng)系統(tǒng)的總勢(shì)能取極小值時(shí),相應(yīng)地它所處的平衡狀態(tài)是穩(wěn)定的。因此可以 使用能量的變化率來(lái)判斷系統(tǒng)所處的狀態(tài)。如圖4所示,能量平衡控制碰撞響應(yīng)主要包括4個(gè)主要步驟,通過(guò)能量函數(shù)判斷系 統(tǒng)是否處于平衡狀態(tài),當(dāng)線性系統(tǒng)處于平衡狀態(tài)時(shí),針對(duì)壓縮彈簧計(jì)算擾動(dòng)位移,進(jìn)行狀態(tài) 變量的設(shè)定,通過(guò)碰撞擾動(dòng)狀態(tài)變量來(lái)管理擾動(dòng),根據(jù)狀態(tài)變量,設(shè)置系統(tǒng)約束的控制矩陣 S矩陣和Z矩陣,使用隱式求解方法,將擾動(dòng)加入線性系統(tǒng)方程。S矩陣和Z矩陣分別是系 統(tǒng)約束中的控制矩陣。在實(shí)現(xiàn)上采用與屈曲控制相似的方法,利用狀態(tài)變量表示系統(tǒng)各狀態(tài),通過(guò)能量 函數(shù)判斷系統(tǒng)是否處于平衡狀態(tài),設(shè)置約束矩陣S和ζ將擾動(dòng)加入到系統(tǒng)。由于同時(shí)存在 多個(gè)碰撞,碰撞能量控制的特殊之處是需要維護(hù)管理多個(gè)狀態(tài)變量,而在屈曲模型中則只 使用一個(gè)狀態(tài)變量即可添加擾動(dòng)。細(xì)節(jié)上我們?cè)O(shè)置平衡控制的閾值,即同時(shí)最多操作發(fā)生 碰撞質(zhì)點(diǎn)的個(gè)數(shù)。動(dòng)態(tài)管理各個(gè)狀態(tài)的釋放,其中碰撞狀態(tài)變量i如表1所示。初始時(shí)該 狀態(tài)變量未被使用而設(shè)為狀態(tài)0,當(dāng)檢測(cè)到最早的碰撞時(shí),將其加入到狀態(tài)變量,存儲(chǔ)其相 應(yīng)的質(zhì)點(diǎn)編號(hào)j,按照屈曲模型中的方法計(jì)算擾動(dòng)位移,同時(shí)添加相應(yīng)約束。在之后的時(shí)間 步計(jì)算系統(tǒng)能量是否達(dá)到平衡,如果系統(tǒng)達(dá)到平衡則釋放該碰撞點(diǎn)的約束以及相應(yīng)狀態(tài)變 量。通過(guò)這種方式可以管理多個(gè)碰撞的平衡,此方法的缺點(diǎn)是由于對(duì)能量進(jìn)行控制,增加系 統(tǒng)穩(wěn)定性的同時(shí)增加了計(jì)算量。但是對(duì)于目前的硬件條件而言,系統(tǒng)穩(wěn)定性占據(jù)了更重要 的位置。表 權(quán)利要求
一種利用能量平衡機(jī)制來(lái)處理柔性體碰撞的方法,所述方法包括在空間層次包圍盒內(nèi)部依次進(jìn)行基于向量積的“點(diǎn)-面”碰撞檢測(cè)和基于四面體的“線-線”碰撞檢測(cè);當(dāng)檢測(cè)到碰撞時(shí),判斷碰撞發(fā)生的類型如果是柔性體與模擬環(huán)境中的剛體模型碰撞,則進(jìn)行約束碰撞處理,在線性系統(tǒng)中添加碰撞之間的約束;如果是柔性體之間的碰撞,將所檢測(cè)到的臨近碰撞的數(shù)量與預(yù)定值進(jìn)行比較,如果所檢測(cè)到的臨近碰撞的數(shù)量小于預(yù)定值,則進(jìn)行沖量碰撞處理;如果所檢測(cè)到的臨近碰撞的數(shù)量大于等于預(yù)定值,則將鄰近的多個(gè)碰撞作為統(tǒng)一的剛體域處理,并將剛體域作為一個(gè)碰撞與剛體域外的其它碰撞同時(shí)進(jìn)行沖量碰撞處理;利用能量平衡來(lái)控制碰撞;所述利用能量平衡來(lái)控制碰撞具體包括通過(guò)能量函數(shù)判斷線性系統(tǒng)是否處于平衡狀態(tài);當(dāng)線性系統(tǒng)處于平衡狀態(tài)時(shí),針對(duì)壓縮彈簧計(jì)算擾動(dòng)位移;進(jìn)行狀態(tài)變量的設(shè)定,通過(guò)碰撞擾動(dòng)狀態(tài)變量來(lái)管理擾動(dòng);根據(jù)狀態(tài)變量,設(shè)置線性系統(tǒng)約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方法,將擾動(dòng)加入線性系統(tǒng)方程。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述包圍盒為基于六面體的包圍盒,所述基于六 面體的包圍盒為能夠包圍碰撞體且邊平行于坐標(biāo)軸的最小六面體。
3.根據(jù)權(quán)利要求1和2所述的方法,其中,基于六面體的包圍盒的構(gòu)造方法為沿碰 撞體局部坐標(biāo)系統(tǒng)的軸向(X,Y,Z),按照由上至下的遞歸細(xì)分方式形成基于包圍盒的二叉 樹;在每一次遞歸過(guò)程中,要求取最小的包圍盒,沿所選擇的剖分面將碰撞體分為正負(fù)兩 半,并將所對(duì)應(yīng)的原始幾何元素分別歸屬正、負(fù)兩邊;遞歸細(xì)分一直進(jìn)行到每一個(gè)葉子節(jié)點(diǎn)只包容一個(gè)原始幾何元素為止,具有η個(gè)原始幾 何元素的包圍盒樹包含η個(gè)非葉子節(jié)點(diǎn)和η個(gè)葉子節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求2所述的方法,其中,基于六面體的包圍盒的相交檢測(cè)方法為兩個(gè)樹A 和B之間雙重遞歸遍歷的過(guò)程對(duì)兩棵樹A和B,若發(fā)現(xiàn)樹A根節(jié)點(diǎn)的包圍盒與樹B內(nèi)部節(jié)點(diǎn)的包圍盒不相交,則停止 向下遍歷;如果遍歷能達(dá)到樹B的葉節(jié)點(diǎn),再用該葉節(jié)點(diǎn)遍歷樹A ;如果能到達(dá)樹A的葉節(jié) 點(diǎn),則進(jìn)一步進(jìn)行基本元素之間的相交測(cè)試;根據(jù)兩個(gè)包圍盒相交當(dāng)且僅當(dāng)它們?cè)谌齻€(gè)坐 標(biāo)軸上的投影區(qū)間均相交這一特性,可以將三維求交問(wèn)題轉(zhuǎn)化為一維求交問(wèn)題。
5.根據(jù)權(quán)利要求2所述的方法,其中,基于六面體的包圍盒的更新方法為當(dāng)模擬的柔 性體發(fā)生移動(dòng)、旋轉(zhuǎn)和變形之后,需要對(duì)包圍盒進(jìn)行更新,根據(jù)包圍盒樹的定義,可以獲得 包圍盒六面體的8個(gè)頂點(diǎn),對(duì)這8個(gè)頂點(diǎn)進(jìn)行相應(yīng)旋轉(zhuǎn)和平移變化,并根據(jù)變化后的頂點(diǎn)計(jì) 算新包圍盒。
6.根據(jù)權(quán)利要求1所述的方法,其中,碰撞處理包括基于約束的碰撞處理,基于沖量的 碰撞處理以及基于剛體動(dòng)力學(xué)影響域的碰撞處理。
7.根據(jù)權(quán)利要求6所述的方法,其中,基于約束的碰撞處理將碰撞檢測(cè)得到的結(jié)果以約束方式加入到線性系統(tǒng)方程中,限制質(zhì)點(diǎn)的運(yùn)動(dòng),從而避免了碰撞的產(chǎn)生。
8.根據(jù)權(quán)利要求6所述的方法,其中,基于沖量的碰撞處理通過(guò)對(duì)碰撞檢測(cè)得到的節(jié) 點(diǎn)施加沖量,影響節(jié)點(diǎn)速度,避免碰撞的產(chǎn)生。
9.根據(jù)權(quán)利要求6所述的方法,其中,基于剛體動(dòng)力學(xué)影響域的碰撞處理包括將多個(gè) 節(jié)點(diǎn)合成一個(gè)大的區(qū)域,在此區(qū)域內(nèi)的節(jié)點(diǎn)互相影響,作為一個(gè)統(tǒng)一的剛體進(jìn)行處理。
10.根據(jù)權(quán)利要求1所述的方法,其中基于四面體的“線-線”碰撞檢測(cè)為,根據(jù)運(yùn)動(dòng)的 相對(duì)性原理,將碰撞檢測(cè)轉(zhuǎn)化為直線與四面體相交的判斷。
全文摘要
公開了一種利用能量平衡機(jī)制來(lái)處理柔性體碰撞的方法,方法包括在空間層次包圍盒內(nèi)部依次進(jìn)行基于向量積的“點(diǎn)-面”碰撞檢測(cè)和基于四面體的“線-線”碰撞檢測(cè);當(dāng)檢測(cè)到碰撞時(shí),判斷碰撞發(fā)生的類型,分別對(duì)柔性體與模擬環(huán)境中的剛體模型碰撞和柔性體之間的碰撞進(jìn)行碰撞處理;利用能量平衡來(lái)控制碰撞響應(yīng)通過(guò)能量函數(shù)判斷系統(tǒng)是否處于平衡狀態(tài);當(dāng)系統(tǒng)處于平衡狀態(tài)時(shí),針對(duì)壓縮彈簧計(jì)算擾動(dòng);進(jìn)行狀態(tài)變量的設(shè)定,通過(guò)擾動(dòng)狀態(tài)變量來(lái)管理擾動(dòng);根據(jù)狀態(tài)變量,設(shè)置系統(tǒng)約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方法,將擾動(dòng)加入線性系統(tǒng)方程。本發(fā)明適用于屈曲生成,能夠更加有效的提高系統(tǒng)穩(wěn)定性,處理碰撞并產(chǎn)生柔軟體仿真褶皺。
文檔編號(hào)G06F17/50GK101866386SQ20101020918
公開日2010年10月20日 申請(qǐng)日期2010年6月25日 優(yōu)先權(quán)日2010年6月25日
發(fā)明者苑維然, 陳玉君 申請(qǐng)人:杭州維肖軟件科技有限公司