quadtree implementada

This commit is contained in:
silva guimaraes 2023-08-19 00:12:11 -03:00
parent e69cbb5622
commit 330dd82a2a

31
main.go
View file

@ -42,13 +42,24 @@ func (q *quadtree) isOccupied() (bool, *magnet) {
} }
} }
func (q *quadtree) hasChildNodes() bool {
return q.nodes != nil
}
func (q *quadtree) insertMagnet(magnets ...*magnet) { func (q *quadtree) insertMagnet(magnets ...*magnet) {
for _, magnet := range magnets { for _, magnet := range magnets {
if magnet.pos.X == 156 {
fmt.Println("foo!")
}
for _, node := range q.nodes { for _, node := range q.nodes {
if node.isOutside(magnet.pos) { if node.isOutside(magnet.pos) {
continue continue
} }
if node.hasChildNodes() {
node.insertMagnet(magnet)
continue
}
if occupied, occupyingMagnet := node.isOccupied(); occupied { if occupied, occupyingMagnet := node.isOccupied(); occupied {
node.subdivide() node.subdivide()
node.magnet = nil node.magnet = nil
@ -127,7 +138,7 @@ func (q *quadtree) drawBoundaries() {
} }
// parâmetros // parâmetros
const initalMagnetCount = 5 const initalMagnetCount = 50
const windowWidth = 700 const windowWidth = 700
const windowHeight = 700 const windowHeight = 700
const magnetRadius = 5 const magnetRadius = 5
@ -192,6 +203,7 @@ func (m *magnet) update(magnets []*magnet) {
m.pos = newPos m.pos = newPos
} }
// debug
func (q *quadtree) parents() []*quadtree { func (q *quadtree) parents() []*quadtree {
if q.parent == nil { if q.parent == nil {
return nil return nil
@ -199,6 +211,7 @@ func (q *quadtree) parents() []*quadtree {
return append(q.parent.parents(), q.parent) return append(q.parent.parents(), q.parent)
} }
// debug
func (q *quadtree) printMagnets() { func (q *quadtree) printMagnets() {
for _, node := range q.nodes { for _, node := range q.nodes {
node.printMagnets() node.printMagnets()
@ -244,15 +257,15 @@ func main() {
defer rl.CloseWindow() defer rl.CloseWindow()
rl.SetTargetFPS(60) rl.SetTargetFPS(60)
// magnets := randomMagnets(initalMagnetCount) magnets := randomMagnets(initalMagnetCount)
magnets := []*magnet{ // magnets := []*magnet{
newMagnet(383, 130, 1), // newMagnet(383, 130, 1),
newMagnet(540, 291, 1), // newMagnet(540, 291, 1),
newMagnet(122, 490, 1), // newMagnet(122, 490, 1),
newMagnet(324, 370, 1), // newMagnet(324, 370, 1),
newMagnet(156, 482, 1), // newMagnet(156, 482, 1),
} // }
quadtree := newQuadTreeRoot() quadtree := newQuadTreeRoot()
quadtree.insertMagnet(magnets...) quadtree.insertMagnet(magnets...)