專利名稱:物件碰撞檢測(cè)系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種檢測(cè)系統(tǒng)及方法,尤其涉及一種物件碰撞檢測(cè)的系統(tǒng)及方法。
背景技術(shù):
在現(xiàn)有的一些游戲和仿真軟件中,存在很多物件,物件之間的碰撞檢測(cè)非常重要。在游 戲軟件中,若沒(méi)有物件碰撞檢測(cè),會(huì)使得物件穿過(guò)彼此,三維畫(huà)面很不真實(shí)。在仿真軟件中 ,物件碰撞檢測(cè)也是非常必要的,如生產(chǎn)線仿真軟件中,人與機(jī)臺(tái)之間的碰撞檢測(cè),人與叉 車之間的碰撞檢測(cè)等,都是非常必要的,如果沒(méi)有上述碰撞檢測(cè),會(huì)導(dǎo)致仿真畫(huà)面不真實(shí)。
目前,即使存在物件碰撞檢測(cè),但是由于實(shí)現(xiàn)過(guò)程比較復(fù)雜,導(dǎo)致視覺(jué)上延時(shí)比較長(zhǎng), 達(dá)到的動(dòng)畫(huà)效果不流暢,給用戶帶來(lái)的視覺(jué)效果不好。
發(fā)明內(nèi)容
鑒于以上內(nèi)容,有必要提供一種有效的檢測(cè)物件之間是否有碰撞的系統(tǒng)及方法。
所述物件碰撞檢測(cè)系統(tǒng),包括計(jì)算機(jī)及與該計(jì)算機(jī)相連的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)中存儲(chǔ)有待 測(cè)物件,所述計(jì)算機(jī)包括生成模塊,用于在三維局部坐標(biāo)系中生成框住待測(cè)物件的長(zhǎng)方體 ,還用于根據(jù)該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體;獲取模塊,用于根據(jù)球體 在三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球心坐標(biāo)值;計(jì)算模塊,用 于計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距;及判斷模塊,用于判斷球心 距是否大于待檢測(cè)的兩個(gè)物件所生成球體半徑值的和,若所述球心距不大于待測(cè)物件所生成 球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;若所述球心距大于待測(cè)物件所生成球體半徑值的 和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。
所述物件碰撞檢測(cè)方法,該方法包括如下步驟在三維局部坐標(biāo)系中生成框住待測(cè)物件 的長(zhǎng)方體;根據(jù)該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體;根據(jù)該球體在所述三維 局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球心坐標(biāo)值;計(jì)算待檢測(cè)的兩個(gè)物 件所生成球體在世界坐標(biāo)系中的球心距;判斷球心距是否大于待測(cè)兩個(gè)物件所生成球體半徑 值的和;若所述球心距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;及 若所述球心距大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。
相較于現(xiàn)有技術(shù),所述物件碰撞檢測(cè)系統(tǒng)及方法,能夠有效快速的進(jìn)行物件碰撞的檢測(cè) ,使得用戶看到的畫(huà)面流暢。
圖l是本發(fā)明物件碰撞檢測(cè)系統(tǒng)較佳實(shí)施例的硬件架構(gòu)圖。 圖2是本發(fā)明物件碰撞檢測(cè)系統(tǒng)較佳實(shí)施例的計(jì)算機(jī)的功能模塊圖。 圖3是本發(fā)明物件碰撞檢測(cè)方法較佳實(shí)施例的作業(yè)流程圖。
具體實(shí)施例方式
如圖1所示,是本發(fā)明物件碰撞檢測(cè)系統(tǒng)較佳實(shí)施例的硬件架構(gòu)圖。該系統(tǒng)包括計(jì)算機(jī) 1,與該計(jì)算機(jī)1相連的數(shù)據(jù)庫(kù)2。所述計(jì)算機(jī)l用于檢測(cè)物件之間的碰撞,所述數(shù)據(jù)庫(kù)2用于 存儲(chǔ)需要檢測(cè)的物件模型,本實(shí)施例中,是以生產(chǎn)線仿真軟件中的物件模型為例進(jìn)行說(shuō)明物 件之間的碰撞檢測(cè),該數(shù)據(jù)庫(kù)2中存儲(chǔ)有該仿真軟件中的物件,如機(jī)臺(tái)、操作機(jī)臺(tái)的操作 人員及叉車等。該數(shù)據(jù)庫(kù)2中還有多個(gè)鏈表,用于存儲(chǔ)待測(cè)物件的信息,于本實(shí)施例中,所 述待測(cè)物件是指機(jī)臺(tái)的一部分或者機(jī)臺(tái)本身,操作人員的身體一部分或者操作人員的本身, 叉車的一部分或者叉車本身等。所述計(jì)算機(jī)1還連接有鍵盤(pán)3、鼠標(biāo)4及顯示器5,作為檢測(cè)物 件碰撞的輸入設(shè)備和輸出設(shè)備。
如圖2所示,是本發(fā)明物件碰撞檢測(cè)系統(tǒng)較佳實(shí)施例的計(jì)算機(jī)l的功能模塊圖。在物件碰 撞檢測(cè)之前,首先要對(duì)用戶需要檢測(cè)的物件在直角坐標(biāo)系上進(jìn)行投影,然后用戶對(duì)該直角坐 標(biāo)系上的投影進(jìn)行框選。本實(shí)施例中,以對(duì)物件的俯視面投影到直角坐標(biāo)系上,并對(duì)該投影 框選來(lái)說(shuō)明該發(fā)明。所述計(jì)算機(jī)1包括生成模塊10、獲取模塊12、存儲(chǔ)模塊14、計(jì)算模塊16 及判斷模塊18。
生成模塊10用于在XY直角坐標(biāo)系上生成用戶所框選物件俯視面的矩形框,并在三維局部 坐標(biāo)系中,根據(jù)該物件在Z軸的高度將該矩形框沿著Z軸進(jìn)行延伸,生成框住該待測(cè)物件的長(zhǎng) 方體。
獲取模塊12用于獲取最大范圍點(diǎn)和最小范圍點(diǎn)的坐標(biāo)值,該坐標(biāo)值不一定位于該長(zhǎng)方體 上。設(shè)坐標(biāo)值表示為(X, Y, Z),其中,最大范圍點(diǎn)的(X, Y, Z)值分別為該長(zhǎng)方體上所 有點(diǎn)坐標(biāo)值中最大的X皿x、 Yraax、 Z皿x值。同理,最小范圍點(diǎn)的(X, Y, Z)值分別為該長(zhǎng)方體 上所有點(diǎn)坐標(biāo)值上最小的Xmin、 Yrain、 Z^n值。
所述生成模塊10還用于生成一個(gè)球體,該球在三維局部坐標(biāo)系上的球心坐標(biāo)值為最大范
圍點(diǎn)坐標(biāo)值與最小范圍點(diǎn)坐標(biāo)值和的一半,該球的半徑值為最大范圍點(diǎn)與最小范圍點(diǎn)之間的 距離的一半。
存儲(chǔ)模塊14用于將所述球體在三維局部坐標(biāo)系上的球心坐標(biāo)值及半徑值保存至數(shù)據(jù)庫(kù)2 的鏈表中。每個(gè)鏈表用于存儲(chǔ)一個(gè)整體物件中所有組成該整體物件的部分物件所生成球體的球心坐標(biāo)值與半徑值,例如操作機(jī)臺(tái)和操作人員分別被分成很多待檢測(cè)的物件,該數(shù)據(jù)庫(kù) 2中有一個(gè)鏈表用于存儲(chǔ)所有組成該操作機(jī)臺(tái)的物件生成的球體球心坐標(biāo)值和半徑值,另有
一個(gè)鏈表用于存儲(chǔ)所有組成操作人員的物件生成的球體球心坐標(biāo)值和半徑值。
所述獲取模塊12所述獲取模塊12還用于在鏈表中獲取待檢測(cè)物件所生成球體的球心坐標(biāo) 值和半徑值,并根據(jù)球體在三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球 心坐標(biāo)值,并獲取該三維局部坐標(biāo)系的原點(diǎn)在世界坐標(biāo)系中的坐標(biāo)值(XI, Yl, Zl)。三維 局部坐標(biāo)系中的坐標(biāo)值(X, Y, Z)轉(zhuǎn)換為世界坐標(biāo)系(X2, Y2, Z2)的坐標(biāo)值的公式為 X2=X1+X, Y2=Y1+Y, Z2=Z1+Z。
計(jì)算模塊l 6用于計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距。 判斷模塊18用于判斷球心距是否大于待測(cè)兩個(gè)物件所生成球體半徑值的和。若所述球心 距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;若所述球心距大于待測(cè) 物件所生成球體半徑值的和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。該判斷模塊18還用于判斷所述鏈 表中是否還存在待檢測(cè)的物件,若存在待檢測(cè)的物件,則繼續(xù)檢測(cè)鏈表中剩下的物件是否發(fā) 生碰撞。
如圖3所示,是本發(fā)明物件碰撞檢測(cè)方法較佳實(shí)施例的作業(yè)流程圖。在物件碰撞檢測(cè)之 前,首先要對(duì)用戶需要檢測(cè)的物件在直角坐標(biāo)系上進(jìn)行投影,然后用戶對(duì)該直角坐標(biāo)系上的 投影進(jìn)行框選。本實(shí)施例中,以對(duì)物件的俯視面投影到直角坐標(biāo)系上,并對(duì)該投影框選來(lái)說(shuō) 明該發(fā)明。
步驟S30,生成模塊10在XY直角坐標(biāo)系上生成用戶所框選物件俯視面的矩形框,并在三 維局部坐標(biāo)系中,根據(jù)該物件在Z軸的高度將該矩形框沿著Z軸進(jìn)行延伸,生成框住該待檢測(cè) 物件的長(zhǎng)方體。
步驟S32,獲取模塊12獲取最大范圍點(diǎn)和最小范圍點(diǎn)的坐標(biāo)值,該坐標(biāo)值不一定位于該 長(zhǎng)方體上。設(shè)坐標(biāo)值表示為(X, Y, Z),其中,最大范圍點(diǎn)的(X, Y, Z)值分別為該長(zhǎng)方 體上所有點(diǎn)坐標(biāo)值中最大的X皿x、 Yraax、 Z皿x值。同理,最小范圍點(diǎn)的(X, Y, Z)值分別為該 長(zhǎng)方體上所有點(diǎn)坐標(biāo)值上最小的Xmin、 Yrain、 Z^n值。
步驟S34,所述生成模塊10生成一個(gè)球體,該球在三維局部坐標(biāo)系上的球心坐標(biāo)值為最 大范圍點(diǎn)坐標(biāo)值與最小范圍點(diǎn)坐標(biāo)值和的一半,該球體的半徑值為最大范圍點(diǎn)與最小范圍點(diǎn) 之間的距離的一半。
步驟S36,存儲(chǔ)模塊14將所述球體在三維局部坐標(biāo)系上的球心坐標(biāo)值及半徑值保存至數(shù) 據(jù)庫(kù)2的鏈表中。每個(gè)鏈表用于存儲(chǔ)一個(gè)整體物件中所有組成該整體物件的部分物件所生成球體的球心坐標(biāo)值與半徑值,例如操作機(jī)臺(tái)和操作人員分別被分成很多待檢測(cè)的物件,該 數(shù)據(jù)庫(kù)2中有一個(gè)鏈表用于存儲(chǔ)所有組成該操作機(jī)臺(tái)的物件生成的球體球心坐標(biāo)值和半徑值 ,另有一個(gè)鏈表用于存儲(chǔ)所有組成操作人員的物件生成的球體球心坐標(biāo)值和半徑值。
步驟S38,所述獲取模塊12根據(jù)球體在三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世 界坐標(biāo)系上的球心坐標(biāo)值,并獲取該三維局部坐標(biāo)系的原點(diǎn)在世界坐標(biāo)系中的坐標(biāo)值(XI, Yl, Zl)。三維局部坐標(biāo)系中的坐標(biāo)值(X, Y, Z)轉(zhuǎn)換為世界坐標(biāo)系(X2, Y2, Z2)的坐 標(biāo)值的公式為X2=X1+X, Y2=Y1+Y, Z2=Z1+Z。
步驟S40 ,計(jì)算模塊16計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距。 步驟S42,判斷模塊18判斷球心距是否大于待測(cè)兩個(gè)物件所生成球體半徑值的和。 步驟S44,若所述球心距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞。
步驟S46,于上述步驟S42中,若所述球心距大于待測(cè)物件所生成球體半徑值的和,則該 兩個(gè)物件沒(méi)有發(fā)生碰撞。判斷模塊18判斷鏈表中是否還有待測(cè)的物件。若所述鏈表中還存在 待檢測(cè)的物件,則轉(zhuǎn)至步驟S38;若所述鏈表中已經(jīng)不存在待檢測(cè)的物件,則結(jié)束流程。
最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳 實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方 案進(jìn)行修改或等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
權(quán)利要求1一種物件碰撞檢測(cè)系統(tǒng),包括計(jì)算機(jī)及與該計(jì)算機(jī)相連的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)中存儲(chǔ)有待測(cè)物件,其特征在于,所述計(jì)算機(jī)包括生成模塊,用于在三維局部坐標(biāo)系中生成框住待測(cè)物件的長(zhǎng)方體,還用于根據(jù)該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體;獲取模塊,用于根據(jù)球體在三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球心坐標(biāo)值;計(jì)算模塊,用于計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距;及判斷模塊,用于判斷球心距是否大于待檢測(cè)的兩個(gè)物件所生成球體半徑值的和,若所述球心距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;若所述球心距大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。
2 如權(quán)利要求l所述的物件碰撞檢測(cè)系統(tǒng),其特征在于,所述獲取模 塊,還用于在三維局部坐標(biāo)系上獲取最大范圍點(diǎn)坐標(biāo)值和最小范圍點(diǎn)坐標(biāo)值,最大范圍點(diǎn)的 (X, Y, Z)值分別為該長(zhǎng)方體上所有點(diǎn)坐標(biāo)值中最大的Xmax、 Ymax、 Zmax值,最小范圍點(diǎn)的 (X, Y, Z)值分別為該長(zhǎng)方體上所有點(diǎn)坐標(biāo)值上最小的Xmin、 Ymin、 Zmin值。
3 如權(quán)利要求2所述的物件碰撞檢測(cè)系統(tǒng),其特征在于,所述球體在 三維局部坐標(biāo)系上的球心坐標(biāo)值為最大范圍點(diǎn)坐標(biāo)值與最小范圍點(diǎn)坐標(biāo)值和的一半,該球體 的半徑值為最大范圍點(diǎn)與最小范圍點(diǎn)之間的距離的一半。
4 如權(quán)利要求l所述的物件碰撞檢測(cè)系統(tǒng),其特征在于,所述計(jì)算機(jī) 還包括存儲(chǔ)模塊,用于將球體在三維局部坐標(biāo)系上的球心坐標(biāo)值及半徑值保存至數(shù)據(jù)庫(kù)
5 一種物件碰撞檢測(cè)方法,其特征在于,該方法包括如下步驟 在三維局部坐標(biāo)系中生成框住待測(cè)物件的長(zhǎng)方體; 根據(jù)該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體;根據(jù)該球體在所述三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球心 坐標(biāo)值;計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距; 判斷球心距是否大于待測(cè)兩個(gè)物件所生成球體半徑值的和;若所述球心距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;及 若所述球心距大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。
6.如權(quán)利要求5所述的物件碰撞檢測(cè)方法,其特征在于,在步驟在三 維局部坐標(biāo)系中生成框住待測(cè)物件的長(zhǎng)方體之后還包括在三維局部坐標(biāo)系上獲取最大范圍 點(diǎn)坐標(biāo)值和最小范圍點(diǎn)坐標(biāo)值,最大范圍點(diǎn)的(X, Y, Z)值分別為該長(zhǎng)方體上所有點(diǎn)坐標(biāo) 值中最大的Xmax、 Ymax、 Zmax值,最小范圍點(diǎn)的(X, Y, Z)值分別為該長(zhǎng)方體上所有點(diǎn)坐標(biāo) 值上最小的Xmin、 Ymin、 Zmin值。
7.如權(quán)利要求6所述的物件碰撞檢測(cè)方法,其特征在于,所述球體在 三維局部坐標(biāo)系上的球心坐標(biāo)值為最大范圍點(diǎn)坐標(biāo)值與最小范圍點(diǎn)坐標(biāo)值和的一半,該球體 的半徑值為最大范圍點(diǎn)與最小范圍點(diǎn)之間的距離的一半。
8.如權(quán)利要求5所述的物件碰撞檢測(cè)方法,其特征在于,在步驟根據(jù) 該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體之后還包括將該球體在三維局部坐標(biāo)系 上的球心坐標(biāo)值及半徑值保存至數(shù)據(jù)庫(kù)的鏈表中,每個(gè)鏈表用于存儲(chǔ)一個(gè)整體物件中所有組 成該整體物件的部分物件所生成球體的球心坐標(biāo)值與半徑值。
全文摘要
一種物件碰撞檢測(cè)方法,包括在三維局部坐標(biāo)系中生成框住待測(cè)物件的長(zhǎng)方體;根據(jù)該長(zhǎng)方體生成一個(gè)固定在三維局部坐標(biāo)系上的球體;根據(jù)該球體在所述三維局部坐標(biāo)系上的球心坐標(biāo)值獲取該球體在世界坐標(biāo)系上的球心坐標(biāo)值;計(jì)算待檢測(cè)的兩個(gè)物件所生成球體在世界坐標(biāo)系中的球心距;判斷球心距是否大于待測(cè)兩個(gè)物件所生成球體半徑值的和;若所述球心距不大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件發(fā)生碰撞;及若所述球心距大于待測(cè)物件所生成球體半徑值的和,則該兩個(gè)物件沒(méi)有發(fā)生碰撞。另外,本發(fā)明還提供一種物件碰撞檢測(cè)系統(tǒng)。
文檔編號(hào)G06T17/40GK101546435SQ20081030068
公開(kāi)日2009年9月30日 申請(qǐng)日期2008年3月24日 優(yōu)先權(quán)日2008年3月24日
發(fā)明者尹宗仁, 楊高科, 稂業(yè)羽, 袁海林, 謝文君, 高麗平 申請(qǐng)人:鴻富錦精密工業(yè)(深圳)有限公司;鴻海精密工業(yè)股份有限公司