Esempio n. 1
0
        /**
         * Create an image which is represented using a QuadTreeNode.
         *
         * @param size      size of image
         * @param center_x  x coordinate of center
         * @param center_y; y coordinate of center
         * @param parent    parent quad tree node
         * @param quadrant  the quadrant that the sub tree is in
         * @param level     the level of the tree
         */
        public static QuadTreeNode createTree(int size, int center_x, int center_y, QuadTreeNode parent, Quadrant quadrant, int level)
        {
            QuadTreeNode node;

            int intersect = checkIntersect(center_x, center_y, size);

            size = size / 2;
            if (intersect == 0 && size < 512)
            {
                node = new WhiteNode(quadrant, parent);
            }
            else if (intersect == 2)
            {
                node = new BlackNode(quadrant, parent);
            }
            else
            {
                if (level == 0)
                {
                    node = new BlackNode(quadrant, parent);
                }
                else
                {
                    node = new GreyNode(quadrant, parent);
                    QuadTreeNode sw = createTree(size, center_x - size, center_y - size, node,
                                                 Quadrant.cSouthWest, level - 1);
                    QuadTreeNode se = createTree(size, center_x + size, center_y - size, node,
                                                 Quadrant.cSouthEast, level - 1);
                    QuadTreeNode ne = createTree(size, center_x + size, center_y + size, node,
                                                 Quadrant.cNorthEast, level - 1);
                    QuadTreeNode nw = createTree(size, center_x - size, center_y + size, node,
                                                 Quadrant.cNorthWest, level - 1);
                    node.setChildren(nw, ne, sw, se);
                }
            }
            return(node);
        }
Esempio n. 2
0
        /**
         * Compute the perimeter for a black node.
         *
         * @param size
         */
        public override int perimeter(int size)
        {
            int retval = 0;
            // North
            QuadTreeNode neighbor = gtEqualAdjNeighbor(QuadTreeNode.NORTH);

            if (neighbor == null || neighbor is WhiteNode)
            {
                retval += size;
            }
            else if (neighbor is GreyNode)
            {
                retval += neighbor.sumAdjacent(Quadrant.cSouthEast, Quadrant.cSouthWest, size);
            }
            else
            {
                ;
            }

            // East
            neighbor = gtEqualAdjNeighbor(QuadTreeNode.EAST);
            if (neighbor == null || neighbor is WhiteNode)
            {
                retval += size;
            }
            else if (neighbor is GreyNode)
            {
                retval += neighbor.sumAdjacent(Quadrant.cSouthWest, Quadrant.cNorthWest, size);
            }
            else
            {
                ;
            }

            // South
            neighbor = gtEqualAdjNeighbor(QuadTreeNode.SOUTH);
            if (neighbor == null || neighbor is WhiteNode)
            {
                retval += size;
            }
            else if (neighbor is GreyNode)
            {
                retval += neighbor.sumAdjacent(Quadrant.cNorthWest, Quadrant.cNorthEast, size);
            }
            else
            {
                ;
            }

            // West
            neighbor = gtEqualAdjNeighbor(QuadTreeNode.WEST);
            if (neighbor == null || neighbor is WhiteNode)
            {
                retval += size;
            }
            else if (neighbor is GreyNode)
            {
                retval += neighbor.sumAdjacent(Quadrant.cNorthEast, Quadrant.cSouthEast, size);
            }
            else
            {
                ;
            }

            return(retval);
        }
Esempio n. 3
0
 /**
  * Construct a <tt>black</tt> quad tree node.
  *
  * @param quadrant the quadrant that this node represents
  * @param the      parent quad tree node
  */
 public BlackNode(Quadrant quadrant, QuadTreeNode parent)
     : base(quadrant, parent)
 {
     ;
 }
Esempio n. 4
0
 /**
  * Return the child that represents this quadrant of the given
  * node.
  *
  * @param node the node that we want the child from.
  * @return the child node representing this quadrant
  */
 public override QuadTreeNode child(QuadTreeNode node)
 {
     return(node.getNorthEast());
 }
Esempio n. 5
0
 /**
  * Create a node in the quad tree.
  *
  * @param childType if there's a parent, the type of child
  * @param nw        the node represent the northwest quadrant
  * @param ne        the node represent the northeast quadrant
  * @param sw        the node represent the southwest quadrant
  * @param se        the node represent the southeast quadrant
  */
 private QuadTreeNode(Quadrant quad, QuadTreeNode nw, QuadTreeNode ne, QuadTreeNode sw, QuadTreeNode se, QuadTreeNode parent)
 {
     this.quadrant = quad;
     this.nw       = nw;
     this.ne       = ne;
     this.sw       = sw;
     this.se       = se;
     this.parent   = parent;
 }
Esempio n. 6
0
 /**
  * Create a leaf node in the Quad Tree.
  *
  * @param childType if there's a parent, the type of child this node represents
  * @param parent    the parent quad tree node
  */
 public QuadTreeNode(Quadrant quad, QuadTreeNode parent)
     : this(quad, null, null, null, null, parent)
 {
     ;
 }
Esempio n. 7
0
 /**
  * Construct a <tt>grey</tt> image node.
  *
  * @param quadrant the quadrant that this node represents
  * @param parent   the parent node in the quad tree.
  */
 public GreyNode(Quadrant quadrant, QuadTreeNode parent)
     : base(quadrant, parent)
 {
     ;
 }
Esempio n. 8
0
 /**
  * Return the child that represents this quadrant of the given
  * node.
  *
  * @param node the node that we want the child from.
  * @return the child node representing this quadrant
  */
 public override QuadTreeNode child(QuadTreeNode node)
 {
     return(node.getSouthWest());
 }
Esempio n. 9
0
 /**
  * Construct a <tt>white</tt> image node.
  *
  * @param quadrant the quadrant that this node represents
  * @param parent   the parent node in the quad tree
  */
 public WhiteNode(Quadrant quadrant, QuadTreeNode parent)
     : base(quadrant, parent)
 {
     ;
 }