/** * @param insertBox */ private double calculateAreaOverlap( float[] box1, float[] box2, float[] insertBox ) { double area1; try { area1 = calculateArea( calculateIntersection( mbbIncludeInsertBox( box1, insertBox ), box2 ) ) - calculateArea( calculateIntersection( box1, box2 ) ); } catch ( NoOverlapException e ) { area1 = 0.0; } double area2; try { area2 = calculateArea( calculateIntersection( box1, box2 ) ); } catch ( NoOverlapException e ) { area2 = 0.0; } return area1 - area2; }
/** * @param insertBox */ private double calculatePerimOverlap( float[] box1, float[] box2, float[] insertBox ) { double perim1; try { perim1 = calculatePerimeter( calculateIntersection( mbbIncludeInsertBox( box1, insertBox ), box2 ) ); } catch ( NoOverlapException e ) { perim1 = 0.0; } double perim2; try { perim2 = calculatePerimeter( calculateIntersection( box1, box2 ) ); } catch ( NoOverlapException e ) { perim2 = 0.0; } return perim1 - perim2; }
/** * Calculate the value of the goal function when the splitting at position i. * * @param leftSide * @param rightSide */ private double wgFunction( float[][] leftSide, float[][] rightSide ) { double result; try { result = calculatePerimeter( calculateIntersection( mbb( leftSide ), mbb( rightSide ) ) ); } catch ( NoOverlapException e ) { float[][] all = new float[leftSide.length + rightSide.length][]; // Arrays.copyOf does not work for ( int i = 0; i < leftSide.length; i++ ) { all[i] = leftSide[i]; } System.arraycopy( rightSide, 0, all, leftSide.length, rightSide.length ); result = calculatePerimeter( mbb( leftSide ) ) + calculatePerimeter( mbb( rightSide ) ) - calculatePerimMax( all ); } return result; }