/** * Sum the perimeter of all white leaves in the two specified * quadrants of the sub quad tree rooted at this node. Since * this is a grey node, we just recursively call this routine * on the appropriate children (that may be white nodes). * * @param quad1 the first specified quadrant * @param quad2 the second specified quadrant * @param size the size of the image represented by this node * @return the perimeter of the adjacent nodes */ public override int sumAdjacent(Quadrant quad1, Quadrant quad2, int size) { QuadTreeNode child1 = quad1.child(this); QuadTreeNode child2 = quad2.child(this); size = size / 2; return(child1.sumAdjacent(quad1, quad2, size) + child2.sumAdjacent(quad1, quad2, size)); }
/** * 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); }