Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Need help with octree
#1
Hello I'm trying to implement an octree, but when I query the centre positions they all return zero, but these should be offset from zero. Here is my code:
class Octree:

    def __init__( self, _centre, _size ):
        '''
        Class to create an Octree
        
        @param: _centre: [float,float,float], position in world space for centre of octree
        @param: _size: float, length of one edge of the first cube, should be big enough to fit all data
        '''

        self.centre = _centre
        self.size = _size
        self.octreeNodes = []

    def subdivideOctree( self, _subdivisions ):
    	'''
        subdivides octree 
        
        @param: _subdivisions: int, number of times to subdivide octree
        '''

            

        for i in range(8):
            newCentre = self.centre

            if ((i&2) == 2):
                    newCentre[0] += self.size * 0.25
            else:
                    newCentre[0] -= self.size * 0.25

            if ((i&4) == 4):
                    newCentre[1] += self.size * 0.25
            else:
                    newCentre[1] -= self.size * 0.25

            if ((i&1) == 1):
                    newCentre[2] += self.size * 0.25
            else:
                    newCentre[2] -= self.size * 0.25
                    
            print newCentre

            self.octreeNodes.append(Octree( newCentre, self.size * 0.5 ))

            if( _subdivisions > 0 ):
                    self.octreeNodes[i].subdivideOctree( _subdivisions - 1 )

    def isLeaf( self ):
    	return self.octreeNodes == None
                
    def getCentre( self ):
        return self.centre

    def getSize( self ):
        return self.size
                
a = Octree([0,0,0], 2.0)
a.subdivideOctree(2)

print a.getCentre()
print a.octreeNodes[0].getCentre()
print a.octreeNodes[0]

for n in a.octreeNodes:
    for b in n.octreeNodes:
        print b.getCentre()
Reply
#2
int is rounding float.
self.centre = list(map(float, _centre))
99 percent of computer problems exists between chair and keyboard.
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020