你的問題相當廣泛,因此我的解釋變得冗長了。我將爲軸向和徑向處理提出兩種爆炸算法的變體。
爲了說明它們與一個例子,我將使用下面的數字(沿着軸線包圍盒只,只有五個份):
P1: [ 0,10] (battery)
P2: [10,14] (motor)
P3: [14,16] (cog)
P4: [16,24] (bit holder)
P5: [18,26] (gear casing)
雖然份P1
到P4
恰好彼此接觸,P4
和P5
實際上重疊。
第一個是基本上按距離縮放一個因子的算法,比如你提出的。如果零件的尺寸在裝配中大不相同,但也會出現重疊零件(例如沿着軸的示例,圓齒輪的延伸比位固定器小得多),它將受到影響。
設定比例因子爲f
,那麼每個邊界框的中心按比例縮小f
,但擴展名不是。然後份將是
P1: 5 + [-5,5] => P1': 5*f + [-5,5]
P2: 12 + [-2,2] => P2': 12*f + [-2,2]
P3: 15 + [-1,1] => P3': 15*f + [-1,1]
P4: 20 + [-4,4] => P4': 20*f + [-4,4]
P5: 22 + [-4,4] => P5': 22*f + [-4,4]
部件P1'
到P4
然後通過
P2' - P1' : (12*f-2) - (5*f+5) = 7*(f-1)
P3' - P2' : (15*f-1) - (12*f+2) = 3*(f-1)
P4' - P3' : (20*f-4) - (15*f+1) = 5*(f-5)
給出如所預期的差爲f=0
零但對於任何分解查看距離強烈地依賴於尺寸之間的距離的單獨部分。如果尺寸變化較大,我認爲這不會太好。
此外,對於重疊部分
P5' - P4' : (22*f-4) - (20*f+4) = 2*f-8
他們仍然合理˚F重疊。
另一種可能性是不定義軸的縮放因子,而是定義部分距離d
。然後,邊界框會像下面的排列:
P1': [ 0,10]
P2': [10,14]+d
P3': [14,16]+2*d
P4': [16,24]+3*d
P5': [18,26]+4*d+6
注意,在最後一行,我們增加24-8=6
,即爲了區分這兩個部分重疊。
雖然這個算法處理上述情況(在我看來)更好的方式,我們必須加入特別小心覆蓋多個其他部分,不應該包括在分組中(例如,在您的情況下處理頂部) 。
一種可能性是在第一步中將部件分組爲組然後將算法應用於這些組的邊界框。之後,它可以再次應用於每個組的零件,省略覆蓋多個子組的零件。在你的情況下,將(注意嵌套的分組可能):
[
([battery,(switch,circuit switch),motor],handle top),
motor cog,
tri-cog,
red-cog,
circle-cog,
bit-holder,
(gear casing,spring,lock knob)
]
您可能會看到,我已介紹了兩種不同的羣體:零件/方括號組由算法處理,即間距添加在這樣的組內的每個部分/子組之間,而圓括號內的組不爆炸。
到目前爲止,我們沒有處理徑向爆炸,因爲它很好地從軸處理中分離出來。但是同樣的兩種方法也可以用於徑向爆炸。但在我看來,第二種算法產生更令人愉快的結果。例如。
[
(battery,switch,<many parts>,gear casing),
(switch,spring),
(handle top, lock knob)
]
在這種情況下,我們將第三組中的第二組和2*r
中添加額外的組分r
所有徑向中心到所有:所述基團可以爲徑向處理如下進行。
請注意,簡單縮放算法運行時無需特殊用戶指導(一旦給定縮放因子),而第二個使用附加信息(分組)。
我希望這個相當長的解釋給你一些想法如何進一步進行。如果我的解釋在某些時候不清楚,或者您有其他問題,請隨時發表評論。
哇。 +1爲徹底。希望我能給更多。 – 2011-03-29 02:18:34