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