為何要對場景進行區域劃分,這個同樣是為了優化碰撞檢測。因為相對於其他邏輯而言碰撞檢測尤其消耗效能,尤其是對網格類的碰撞體進行碰撞檢測時效能開銷更大。
試想一下場景中有1000個物體 如果沒有區域劃分的情況,物體兩兩碰撞檢測的次數是 1000 * 1000次,
而如果遊戲幀率達到60,那麼這個碰撞檢測邏輯就達到了 1000 * 1000 * 60次,
而即時採用優化的機制,因為當乙個物體與場景中其他物體碰撞之後,可以不再參與後面的碰撞檢測。那麼次數是(1000 + 999 + 998 + ...+ 1 )* 60 = (1000 * 999) / 2 * 60
如果我們將場景中的物體平均分配到 16個區域中, 當物體的大小不超過區域大小的時候,通常我們只需要和所在區域內的物體進行碰撞檢測。理想情況 1000個物體分配到16個區域 ,每個區域中有 62 個物體
碰撞檢測次數為 62 * 62 * 60 * 16 = 369 0240次
相比於 1000 * 1000 * 60 = 6000 0000次 可以節省 5630 9760次,大大減少了碰撞檢測的總次數。
需要注意的是 處理區域邊界問題,另外需要保證場景中最大的物體的大小不能夠超過乙個區域的大小。這樣實際情況中最壞的情況是乙個物體處於邊界時可能同時在 4個區域中
圓形劃分區域(空間)
一道阿里的筆試題目 大意 乙個平面空間內,使用乙個圓形將空間劃分,例如乙個圓形將空間劃分為兩個區域 包括圓外面的 兩個圓形最多可以劃分4個區域 三個圓最多可以劃分8個,4個圓可最多劃分14個 一開始,思路 由新增的圓去切割現有的區域,考慮如何才可以切割最多區域。但是,當區域成倍的增加,圖形過於複雜,...
leetcode 由斜槓劃分區域
在由 1 x 1 方格組成的 n x n 網格 grid 中,每個 1 x 1 方塊由 或空格構成。這些字元會將方塊劃分為一些共邊的區域。請注意,反斜槓字元是轉義的,因此 用 表示。返回區域的數目。示例 1 輸入 輸出 2 解釋 2x2 網格如下 示例 2 輸入 輸出 1 解釋 2x2 網格如下 示...
959 由斜槓劃分區域
在由 1 x 1 方格組成的 n x n 網格 grid 中,每個 1 x 1 方塊由 或空格構成。這些字元會將方塊劃分為一些共邊的區域。返回區域的數目。思路 首先需要思考題目轉換,這是求連通塊個數的題目。因為是連通塊個數問題,所以用並查集解決。然後就只要考慮幾個問題就好了 1.最小單位應該是多大?...