欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于經緯度的碰撞檢測方法與流程

文檔序號:11413476閱讀:836來源:國知局

本發(fā)明屬于計算機檢測技術領域,具體涉及一種基于經緯度的碰撞檢測方法。



背景技術:

隨著計算機硬件技術的不斷發(fā)展,虛擬手術已成為計算機科學的一個重要研究領域,在虛擬手術環(huán)境中,由于虛擬手術刀具的移動,與人體的肌肉等網格模型經??赡馨l(fā)生碰撞。為了保持后續(xù)的軟組織形變,需要系統(tǒng)及時檢測到這些碰撞,并作相應的碰撞反應,同時在計算完畢后快速更新數據。

通常碰撞檢測基于空間域的角度可以分為基于實體空間碰撞檢測方法與基于圖像空間碰撞檢測方法兩種。由于圖像空間碰撞檢測本身是空間離散采樣的,其精度受圖形分辨率的約束,從而影響碰撞檢測的經度,而且該類方法只能適用于圖面,因此在虛擬手術系統(tǒng)中的碰撞檢測對圖形空間碰撞檢測不作考慮。而實體空間碰撞檢測目前研究最多使用最廣泛的則是基于層次包圍體樹的檢測方法。但是該類方法的高效檢測則是基于建立一個較為平衡的包圍體樹的前提下,如果包圍體樹建立的不平衡,會導致部分節(jié)點查詢的效率低下。同時,對于節(jié)點更新則需要重新自底向上或者自頂向下掃描包圍體樹,從而達到更新包圍體樹,這個更新包圍體樹的過程,幾乎就是重新構建一個新樹,會嚴重降低虛擬手術在切割變形操作后的再次碰撞的速度。



技術實現要素:

本發(fā)明提供了一種基于經緯度的碰撞檢測方法,通過利用經緯度使得空間的所有三角形的三維坐標成為了二維坐標,然后對各個維度分配一個跳表結構,經度則為跳表排序的關鍵字,使得碰撞檢測與更新速度都能達到跳表所能有的高效,提高了碰撞的查詢效率,同時增強了查詢效率的穩(wěn)定性,提高了更新節(jié)點的效率。

一種基于經緯度的碰撞檢測方法,包括如下步驟。

(1)對場景中待碰撞的剛體或者軟組織物體的邊界三角面片信息進行預處理,獲取三角面片形心的z坐標最大值Zmax與z坐標最小值Zmin,以及所有三角面片的平均邊長length_avg,初始化經緯度數據結構中維度與跳表數組下表的對應關系,同時動態(tài)申請三角面片數量大小的動態(tài)指針數組,初始化都為NULL,用于存儲跳表中的單元地址。

(2)遍歷三角面片集合,得到各個維度的所有三角面片形心的平均值(中心坐標),記錄到經緯度數據結構中。

(3)遍歷所有的三角面片,每個三角面片都計算得到形心坐標,根據形心坐標得到所處的維度,根據該維度的中心坐標,獲取經度,存入對應維度的跳表中。

(4)對外部三角面片集合進行碰撞檢測時候,計算外部三角面片的形心坐標,根據z坐標得到維度,根據維度得到維度中心坐標,計算經度后在該維度的跳表中查詢最近的經度的三角面片,進行兩個三角面片進行精確碰撞檢測。

(5)某個三角面片在外力的作用下發(fā)生變形,拓撲重構的過程只需要對該三角面片進行刪除后再插入即完成更新。

所述的步驟(1)中,初始化經緯度數據結構中維度與跳表數組下表的對應關系的實現過程為:首先計算維度最大值Dimension_Max = (int)((Zmax-Zmin)/ length_avg)+1;然后申請Dimension_Max大小的跳表結構數組;最后得到跳表的下表i與維度的關系則是i = Dimension-1。

所述的步驟(2)中,得到各個維度的所有三角面片形心的平均值(中心坐標)的實現過程為:首先申請維度最大值Dimension_Max大小的三個double數組,分別代表各個維度的x,y,z的累加;然后遍歷被檢測物體的所有的表面三角面片,每個三角面片都計算其形心坐標(x,y,z),得到對應的維度w=(int)((Zmax-z)/length_avg)+1,在三個double數組的下標為w-1的位置,分別累加x,y,z的值,最后三個數組的每個元素都除以三角面片的集合的個數。

所述的步驟(3)中,當第m個三角面片插入時,由該m號三角面片的形心坐標,得到維度為w,得到經度為p,那么使用跳表數組的w-1號跳表,則按照經度p作為該跳表的關鍵字,按照從小到大的排序方式,找到對應的插入位置,申請一個結構體的內存空間,內部存放當前三角面片的序號,插入其中。

所述的步驟(4)中,進行兩個三角面片進行精確碰撞檢測的實現過程為:首先進行包圍盒的檢測,然后進行穿越算法進行檢測。

所述的步驟(5)中,對于發(fā)生變形的三角面片,根據存儲著其跳表中地址的動態(tài)數組,根據三角面片的下標得到其跳表中的地址,可以快速進行刪除,然后重新計算三角面片的形心,重新計算其維度與經度,加入到對應維度的跳表中。

所述的跳表為是一種隨機化的數據結構,基于并聯(lián)的鏈表,實現簡單,插入、刪除、查找的復雜度均為O(logN),跳表也是鏈表的一種,且它在鏈表的基礎上增加了跳躍功能,正是這個跳躍的功能,使得在查找元素時,跳表能夠提供O(log n)的時間復雜度,同樣,刪除,添加都是上限為O(log n)的時間復雜度,它的最底層是所有元素的一個鏈表,而沒上一層,則只有下一層的部分元素,對于每一個元素,其是否在上一層出現的準則是按照概率,50%的可能會出現在上一層。因此上一層的元素應該是有序的,而且從概率上看是下一層元素的50%。

本發(fā)明的有益技術效果是:通過利用經緯度的思想使得空間的所有三角形的三維坐標成為了二維坐標,然后按照各個維度分配一個跳表結構,經度則為跳表排序的關鍵字,使得碰撞檢測與更新速度都能達到跳表所能有的高效,達到了的時間復雜度,提高了碰撞的查詢效率,同時增強了查詢效率的穩(wěn)定性,提高了更新節(jié)點的效率。

附圖說明

圖1為本發(fā)發(fā)明碰撞檢測新方法的步驟流程示意圖。

具體實施方式

為了更為具體地描述本發(fā)明,下面結合附圖及具體實施方式對本發(fā)明的碰撞檢測方法進行詳細說明。

如圖1所示,一種基于經緯度的碰撞檢測方法,包括如下步驟。

(1)初始化經緯度數據結構,生成跳表數組與動態(tài)指針數組;

對場景中待碰撞的剛體或者軟組織物體的邊界三角面片信息進行預處理,使用三個浮點型變量,兩個變量用來記錄三角面片形心z的最大與最小值,還有一個浮點型變量length_avg用來累加每一個三角形的平均邊長,在掃描一遍后,除以三角面片的總數,然后就獲取了z坐標最大值Zmax與z坐標最小值Zmin,以及所有三角面片的平均邊長length_avg,計算維度最大值Dimension_Max = (int)((Zmax-Zmin)/ length_avg)+1,初始化經緯度數據結構中維度與跳表數組下標的對應關系,例如定義一個函數,函數的傳入參數是維度w,傳出的參數就是跳表的下標i,跳表的下表i與維度的關系則是i = Dimension-1。

動態(tài)申請三角面片數量大小的動態(tài)指針數組,初始化每個指針都為NULL,每個指針未來都存儲當三角面片加入跳表時期在跳表底層鏈表中的單元地址,可以方便在刪除三角形的時候,根據這個地址直接找到三角面片在跳表中的位置,能將其O(1)時間找到,然后刪除,這里由于在修改三角面片的時候,先知道三角面片信息發(fā)生變化,無法根據其經緯度來查找原始信息,必須要使用該指針數組來輔助搜索。

(2)得到各個維度的中心坐標;

申請維度最大值Dimension_Max大小的三個double數組,分別代表各個維度的x,y,z的累加;然后遍歷被檢測物體的所有的表面三角面片,每個三角面片都計算其形心坐標(x,y,z),得到對應的維度w=(int)((Zmax-z)/length_avg)+1,在三個double數組的下標為w-1的位置,分別累加x,y,z的值,最后三個數組的每個元素都除以軟組織表面三角面片的總數,得到相應的各個維度的中心坐標。

(3)將所有軟組織的表面三角面片添加到各自對應維度的跳表中;

遍歷所有的軟組織的三角面片,每個三角面片都計算得到形心坐標(x,y,z),根據形心坐標中的z,按照w=(int)((Zmax-z)/length_avg)+1得到所處的維度,根據維度找到對應的跳表數組的下標,然后找到該跳表,同時根據該維度的中心坐標,與當前的三角面片的形心坐標(x,y,z)得到一個向量M,計算M與(1,0,0)矢量的弧度,從(1,0,0)矢量逆時針開始計算弧度,該弧度就是經度。以經度為關鍵搜索字,搜索跳表的最佳插入位置,然后將該三角面片的序號作為信息插入到跳表中,并將插入的跳表的底層的位置的地址記錄到動態(tài)數組中。

(4)對虛擬器具的某個三角面片與軟組織進行碰撞檢測;

對外部三角面片集合進行碰撞檢測時候,計算外部三角面片的形心坐標(x,y,z),根據z坐標得到維度w=(int)((Zmax-z)/length_avg)+1,根據維度得到當前維度的中心坐標,計算經度后在該維度的跳表中查詢最近的經度的三角面片,對搜索出來的三角面片與外部的三角面片進行精確的碰撞檢測,即一個三角形的三條線段是否與另外一個三角形有直接碰撞,得到碰撞結果。

(5)更新經緯度數據結構;

某個序號為N的三角面片在外力的作用下發(fā)生變形,拓撲重構的過程只需要在動態(tài)指針數組中,找到序號為N的位置的地址信息,然后在跳表中刪除該地址對應的節(jié)點,最后重新將序號為N的三角面片計算形心,得到維度,得到經度,存儲到經緯度數據結構中。

本實施方式通過利用經緯度的思想使得空間的所有三角形的三維坐標成為了二維坐標,然后按照各個維度分配一個跳表結構,經度則為跳表排序的關鍵字,使得碰撞檢測與更新速度都能達到跳表所能有的高效,達到了的時間復雜度,提高了碰撞的查詢效率,同時增強了查詢效率的穩(wěn)定性,提高了更新節(jié)點的效率。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
新安县| 肥东县| 儋州市| 中阳县| 灵川县| 湘潭市| 成武县| 明光市| 常州市| 汉中市| 泸州市| 兴安盟| 汝阳县| 平和县| 商丘市| 浦城县| 大同县| 青田县| 呼伦贝尔市| 台南县| 嘉峪关市| 呈贡县| 红原县| 儋州市| 云南省| 同心县| 长泰县| 邵阳市| 辽宁省| 滦南县| 顺平县| 平顺县| 榆林市| 靖宇县| 彰化县| 安阳市| 石河子市| 元氏县| 平遥县| 沁水县| 合山市|