Ik ben bezig met een bepaalde graphics engine en daar moet ik vierkanten zoeken die botsen met elkaar.
Dus je stopt 1000 vierkanten met verschillende grootte in een soort list en daarna wil je opzoeken welke vierkant allemaal botsen met het opgegeven vierkant.
Voorbeeld:
InsertRectangle(id, x, y, w, h);
// dit 1000 keer doen
array GetCollisionRectangles(x, y, w, h); //Geeft dus een array terug met welke vierkanten met het opgegeven vierkant botsen.
Dit is te doen met een quadtree maar het probleem: Ik gebruik een relatief trage taal (javascript) en het moet dus waanzinnig efficiënt gebeuren. Een quadtree is hier te traag voor. Wat ook een eigenschap is voor deze vierkanten is dat een aantal vierkanten elke step (een step is in mijn geval dus 1 frame) een andere positie aannemen en dat een aantal vierkanten altijd op dezelfde positie blijven.
Een goed voorbeeld is dit.
Maar dan moet het dus werken met tot 1000 vierkanten. Het voorbeeld gooit de hele quadtree elke step weg en vult hem weer met alle vierkanten, niet echt efficiënt lijkt mij.
Dus ik zoek eigenlijk hetzelfde algoritme met een mogelijk tot het updaten van posities ipv alles weg gooien en de nieuwe posities in de tree schrijven aangezien slechts 20% van het totaal aantal vierkanten beweegt en de rest heeft een vaste positie.
Kent iemand een algoritme of methode wat dit het meest efficiënt en snel kan doen?
Dus je stopt 1000 vierkanten met verschillende grootte in een soort list en daarna wil je opzoeken welke vierkant allemaal botsen met het opgegeven vierkant.
Voorbeeld:
InsertRectangle(id, x, y, w, h);
// dit 1000 keer doen
array GetCollisionRectangles(x, y, w, h); //Geeft dus een array terug met welke vierkanten met het opgegeven vierkant botsen.
Dit is te doen met een quadtree maar het probleem: Ik gebruik een relatief trage taal (javascript) en het moet dus waanzinnig efficiënt gebeuren. Een quadtree is hier te traag voor. Wat ook een eigenschap is voor deze vierkanten is dat een aantal vierkanten elke step (een step is in mijn geval dus 1 frame) een andere positie aannemen en dat een aantal vierkanten altijd op dezelfde positie blijven.
Een goed voorbeeld is dit.
Maar dan moet het dus werken met tot 1000 vierkanten. Het voorbeeld gooit de hele quadtree elke step weg en vult hem weer met alle vierkanten, niet echt efficiënt lijkt mij.
Dus ik zoek eigenlijk hetzelfde algoritme met een mogelijk tot het updaten van posities ipv alles weg gooien en de nieuwe posities in de tree schrijven aangezien slechts 20% van het totaal aantal vierkanten beweegt en de rest heeft een vaste positie.
Kent iemand een algoritme of methode wat dit het meest efficiënt en snel kan doen?