quadtree implementada
This commit is contained in:
parent
e69cbb5622
commit
330dd82a2a
1 changed files with 22 additions and 9 deletions
31
main.go
31
main.go
|
|
@ -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...)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue