Kokkupõrgete kontroll (aiult) piirdenelinurki kasutades töötab rahuldavalt vaid siis, kui objektid on kumerad või nii väikesed, et neid võib (kumera) piirdenelinurgaga lähendada. Geomeetrilist kujundit (spriiti) nimetatakse kumeraks, kui selle ükskõik milliseid kaht punkti ühendav sirglõik asub täielikult kujundis.
Objektide kokkupõrke arvutamine ruudustiku (grid) abil
Sageli tuleb kontrollida kokkupõrkeid struktuuriga, mis ise pole kumer, kuid koosneb paljudest alamosadest, mida saab lähendada piirdenelinurkadega.
Sellise alamosadest koosneva struktuuri saab lihtsamal juhul paigutada ekraanile korrapärase ruudustiku (grid) ruutudesse, salvestada iga ruudukese jaoks arv (0 või 1) mis näitab, kas ruudukeses on objekt ja kontrollida siis lõikumist selle kahemõõtmelise massiivi abil.
Näiteks puude ridadest moodustatud labürindi loomisel moodustatakse kahemõõtmeline massiiv map. Javascriptis on vaid ühemõõtmelised massiivid, kahemõõtmelise massiivi saamiseks peab lihtsalt massiivi iga elemendi kuulutama taas massiiviks. Kui labürindis on rl rida, vl veergu ja iga ruudu külg koosneb k puust, toimub algväärtustamine käskudega
map = []; for(var i=0; i < vl*k+1;i++) //colums in virtual map[i]=[]; for(var i=0;i < vl*k+1;i++){ for(var j=0;j < rl*k+1;j++){ map[i][j]=0;} }
Iga puu joonistamisel muudetakse ka vastavat massiivi map elementi: kui ruutu [i,j] joonistatakse puu, täidetakse map[i][j] = 1.
Kui ruudustiku ruudu laius/kõrgus on d0, saadakse kanvaa punkti (x,y) sisaldava ruudu indeksid i,j valemitega
var i = Math.floor(x/d0); var j = Math.floor(y/d0);
Seega punktis (x,y) on kokkupõrge, kui map[i][j] = 1.
Loomulikult saab ruudustikku kasutada vaid siis, kui väikese objekti kiirus (pikslit/kaadris) on väiksem kui ruudu laius/kõrgus. Kui kiirus on suurem, võib objekt ruudust lihtsalt läbi hüpata ilma seda märkamata.