/** * 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; }