Beispiel #1
0
 private static VBox[] doCut(
     int color, VBox vbox, List<Integer> partialsum, List<Integer> lookaheadsum, int total) {
   int dim1 = 0, dim2 = 0;
   if (color == RED) {
     dim1 = vbox.getR1();
     dim2 = vbox.getR2();
   } else if (color == GREEN) {
     dim1 = vbox.getG1();
     dim2 = vbox.getG2();
   } else if (color == BLUE) {
     dim1 = vbox.getB1();
     dim2 = vbox.getB2();
   }
   VBox vbox1, vbox2;
   int left, right, d2;
   Integer count2;
   for (int i = dim1; i < dim2; i++) {
     if (partialsum.get(i) > total / 2) {
       vbox1 = vbox.copy();
       vbox2 = vbox.copy();
       left = i - dim1;
       right = dim2 - i;
       if (left <= right) {
         d2 = Math.min(dim2 - 1, ~~(i + right / 2));
       } else {
         d2 = Math.max(dim1, ~~(i - 1 - left / 2));
       }
       while (partialsum.get(d2) == null) d2++;
       count2 = lookaheadsum.get(d2);
       while (count2 == null && partialsum.get(d2 - 1) == null) count2 = lookaheadsum.get(--d2);
       if (color == RED) {
         vbox1.setR2(d2);
         vbox2.setR1(vbox1.getR2() + 1);
       } else if (color == GREEN) {
         vbox1.setG2(d2);
         vbox2.setG1(vbox1.getG2() + 1);
       } else if (color == BLUE) {
         vbox1.setB2(d2);
         vbox2.setB1(vbox1.getB2() + 1);
       }
       return new VBox[] {vbox1, vbox2};
     }
   }
   return null;
 }