畫素級碰撞的一種演算法

2021-05-24 21:25:12 字數 1296 閱讀 7001

在 flash 中,任何形狀的元件都是被包含在乙個完整的矩形容器裡的,此碰撞演算法就是根據這一點來獲取兩個不規則形狀的交集,這麼說可能你聽起來有些不明白,我們來進一步解釋一下。

假如我們這裡有兩個不規則形狀的 mc ,即 mc1 和 mc2 。如下圖:

為了更方便於的理解,我將形狀做在的容器 mc1 和 mc2 用單色的矩形來表示,如下圖:

此時我們可以很明顯的看到兩個矩形的交集,根據 mc1 和 mc2 深度不同,可以有以下兩種情況:

通過觀察以上兩張圖,我們可以發現,除了交集的部分,其他地方的畫素值 bitmapdata 是完全相同的,也就是說,當兩個 mc 存在交集 ( 即碰撞 ) 的時候,交集部分的畫素值會不同,當然,如果在這個交集部分,兩個 mc 都沒畫素,這中情況,我們認為這兩個 mc 是沒有碰撞的。

進而,我們可以這麼想,將兩個容器矩形的合集放在乙個 bitmapdata 中。**中,我們可以通過 copypixels 來實現。

這樣根據 mc1 和 mc2 的深度不同,我們可以得到兩個合集的 bitmapdata ,然後我們將這兩個合集裡的畫素值進行相減得到 resultbitmapdata ,**中可以通過 bitmapdata 類的 compare 來實現,存在以下兩種情況:

1, 兩個 mc 的交集部分的畫素值不同時為空,相減之後,如果結果 resultbitmapdata 不為空,則我們可以判斷兩個 mc 有碰撞,如果結果 resultbitmapdata 為空,則我們說,兩個 mc 沒有發生碰撞。

2, 兩個 mc 的交集部分的畫素值同時為空,這樣只有一種結果, resultbitmapdata 為空,這種情況我們認識兩個 mc 是沒有發生碰撞的。

from:

一種濾波演算法

剛看到要寫濾波演算法的時候懵了,想著是不是要去掉最大值 最小值什麼的,感覺很高大上 於是開始查資料了解,發現濾波演算法其實有很多種方法,如下列舉了一些,當然能起到的濾波作用也是不同的 於是我看了下,選擇了一種最簡單實用的濾波演算法學習了一下,即下面的中位值濾波演算法 簡單來說就是多次取樣,排序,取中...

一種負載均衡的演算法

今天晚上搞 走讀,一夥人在一起就一段 糾結了半天 大概是下面這個樣子 for int i 0 i urls.size i 這樣的每個使用者有乙個userid,當使用者點播節目的時候,需要去鑑權伺服器進行鑑權,一台鑒權伺服器可能無法應付過多的使用者,這裡布置了多台伺服器,伺服器的位址存放在urls這個...

一種快速排序演算法

using system class program for int l 0 l src.length l src count temp l i 3 0xff temp l static void main string args watch.stop console.writeline quick...