SHARE
TWEET

bsp

a guest Nov 17th, 2015 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         int size = 4;
  2.         public Set<Rectangle> Split(int minWidth, int minHeight){
  3.                 int[] sizes = {
  4.                                
  5.                                 (minWidth/15)*4,
  6.                                 (minWidth/15)*8,
  7.                                 (minWidth/18)*6,
  8.                                 (minWidth/18)*12,
  9.                                 (minWidth/15)*12,
  10.                        
  11.                                 };
  12.  
  13.                 Set<Rectangle> rects = new HashSet<>();
  14.                 Stack<Node> ends = new Stack<>();
  15.                 Stack<Node> hold = new Stack<>();
  16.                 hold.add(start);
  17.                
  18.                 while(!hold.isEmpty()){
  19.                         Node current;
  20.                         size = sizes[r.nextInt(sizes.length)];
  21.                         if((current = hold.pop()).hasChildren()){
  22.                                
  23.                                 hold.push(current.children[0]);
  24.                                 hold.push(current.children[1]);                        
  25.                                
  26.                         }else{
  27.                                
  28.                                 if(current.rect.width < minWidth && current.rect.height < minHeight){ // change this later to deal with either if able.
  29.                                        
  30.                                         ends.add(current);
  31.                                 }else{
  32.                                        
  33.                                 Rectangle[] boxes = new Rectangle[2];                          
  34.                                         if(current.rect.width == 0 || current.rect.height == 0){
  35.                                                 continue;
  36.                                         }
  37.                                         if((current.rect.width/current.rect.height > 1.5) && (current.rect.height/current.rect.width < 1.5)){//horizontal
  38.                                                 int minX = (int)(current.rect.getMinX()+r.nextInt(current.rect.width/size)*size);                                              
  39.                                                 int nWidth = minX-current.rect.x;                                      
  40.                                                 boxes[0] = new Rectangle(current.rect.x,current.rect.y,nWidth,current.rect.height);                                            
  41.                                                 boxes[1] = new Rectangle(minX,current.rect.y,current.rect.width-nWidth,current.rect.height);                                   
  42.                                                                                        
  43.                                         }else if((current.rect.height/current.rect.width > 1.5) && (current.rect.width/current.rect.height < 1.5)){//vertical
  44.                                                 int minY = (int)(current.rect.getMinY()+r.nextInt(current.rect.height/size)*size);                                             
  45.                                                 int nHeight = minY-current.rect.y;                                     
  46.                                                 boxes[0] = new Rectangle(current.rect.x,current.rect.y,current.rect.width,nHeight);                                            
  47.                                                 boxes[1] = new Rectangle(current.rect.x,minY,current.rect.width,current.rect.height-nHeight);                                  
  48.                                                
  49.                                         }else{
  50.                                                 if((current.rect.height < current.rect.width) || (current.rect.height == current.rect.width && r.nextBoolean())){
  51.                                                         int minX = (int)(current.rect.getMinX()+r.nextInt(current.rect.width/size)*size);                                              
  52.                                                         int nWidth = minX-current.rect.x;                                      
  53.                                                         boxes[0] = new Rectangle(current.rect.x,current.rect.y,nWidth,current.rect.height);                                            
  54.                                                         boxes[1] = new Rectangle(minX,current.rect.y,current.rect.width-nWidth,current.rect.height);                           
  55.                                                 }else{
  56.                                                         int minY = (int)(current.rect.getMinY()+r.nextInt(current.rect.height/size)*size);                                             
  57.                                                         int nHeight = minY-current.rect.y;                                     
  58.                                                         boxes[0] = new Rectangle(current.rect.x,current.rect.y,current.rect.width,nHeight);                                            
  59.                                                         boxes[1] = new Rectangle(current.rect.x,minY,current.rect.width,current.rect.height-nHeight);  
  60.                                                 }
  61.                                                
  62.                                         }
  63.                                         //System.out.println(current.rect);
  64.                                                 if(boxes[0].getSize().equals(boxes[1].getSize())){
  65.                                                 hold.push(current);                                                            
  66.                                                 }else{
  67.                                                 (current.children[0] = new Node(boxes[0])).parent = current;
  68.                                                 (current.children[1] = new Node(boxes[1])).parent = current;                                   
  69.                                                 hold.push(current.children[0]);
  70.                                                 hold.push(current.children[1]);
  71.                                                 System.out.println(size);
  72.                                                 }
  73.                                 }      
  74.                         }
  75.                 }
  76.                        
  77.                
  78.                
  79.                 for(Node n: ends){
  80.                         rects.add(n.rect);
  81.                 }
  82.                
  83.                 return rects;
  84.         }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top