code: def intersect(self, x1, x2 = None) :
  		
  		
  		def condition(x1, x2, tree) :
  			#print self.id, tree.x1, tree.x2, x1, x2
  			if (tree.x1 != None and tree.x2 != None) and (tree.x1 <= x1 and x1 < tree.x2 or tree.x1 <= x2 and x2 < tree.x2) :
  				return True
  			return False
  			
  		if x2 == None :
  			xx1, xx2 = x1, x1
  		elif x1 > x2 :
  			xx1, xx2 = x2, x1
  		else :
  			xx1, xx2 = x1, x2
  			
  		c1 = self.__dichotomicSearch(xx1)
  		c2 = self.__dichotomicSearch(xx2)
  		
  		if c1 == -1 or c2 == -1 :
  			return []
  			
  		if xx1 < self.children[c1].x1 :
  			c1 -= 1
  			
  		inter = self.__radiateDown(x1, x2, c1, condition)
  		if self.children[c1].id == self.children[c2].id :
  			inter.extend(self.__radiateUp(x1, x2, c2+1, condition))
  		else :
  			inter.extend(self.__radiateUp(x1, x2, c2, condition))
  		
  		ret = []
  		for c in inter :
  			ret.extend(c.intersect(x1, x2))
  		
  		inter.extend(ret)
  		return inter
docs: Returns a list of all segments intersected by [x1, x2]