Advertisement
Guest User

bsp

a guest
Nov 17th, 2015
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  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.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement