public Split split(final Arc arc){
  final List<Double> minus=new ArrayList<Double>();
  final List<Double> plus=new ArrayList<Double>();
  final double reference=FastMath.PI + arc.getInf();
  final double arcLength=arc.getSup() - arc.getInf();
  for (  final double[] a : this) {
    final double syncedStart=MathUtils.normalizeAngle(a[0],reference) - arc.getInf();
    final double arcOffset=a[0] - syncedStart;
    final double syncedEnd=a[1] - arcOffset;
    if (syncedStart < arcLength) {
      minus.add(a[0]);
      if (syncedEnd > arcLength) {
        final double minusToPlus=arcLength + arcOffset;
        minus.add(minusToPlus);
        plus.add(minusToPlus);
        if (syncedEnd > MathUtils.TWO_PI) {
          final double plusToMinus=MathUtils.TWO_PI + arcOffset;
          plus.add(plusToMinus);
          minus.add(plusToMinus);
          minus.add(a[1]);
        }
 else {
          plus.add(a[1]);
        }
      }
 else {
        minus.add(a[1]);
      }
    }
 else {
      plus.add(a[0]);
      if (syncedEnd > MathUtils.TWO_PI) {
        final double plusToMinus=MathUtils.TWO_PI + arcOffset;
        plus.add(plusToMinus);
        minus.add(plusToMinus);
        if (syncedEnd > MathUtils.TWO_PI + arcLength) {
          final double minusToPlus=MathUtils.TWO_PI + arcLength + arcOffset;
          minus.add(minusToPlus);
          plus.add(minusToPlus);
          plus.add(a[1]);
        }
 else {
          minus.add(a[1]);
        }
      }
 else {
        plus.add(a[1]);
      }
    }
  }
  return new Split(createSplitPart(plus),createSplitPart(minus));
}

public Split split ( final Arc arc ) { final List < Double > minus = new ArrayList < Double > ( ) ; final List < Double > plus = new ArrayList < Double > ( ) ; final double reference = FastMath . PI + arc . getInf ( ) ; final double arcLength = arc . getSup ( ) - arc . getInf ( ) ; for ( final double [ ] a : this ) { final double syncedStart = MathUtils . normalizeAngle ( a [ 0 ] , reference ) - arc . getInf ( ) ; final double arcOffset = a [ 0 ] - syncedStart ; final double syncedEnd = a [ 1 ] - arcOffset ; if ( syncedStart < arcLength ) { minus . add ( a [ 0 ] ) ; if ( syncedEnd > arcLength ) { final double minusToPlus = arcLength + arcOffset ; minus . add ( minusToPlus ) ; plus . add ( minusToPlus ) ; if ( syncedEnd > MathUtils . TWO_PI ) { final double plusToMinus = MathUtils . TWO_PI + arcOffset ; plus . add ( plusToMinus ) ; minus . add ( plusToMinus ) ; minus . add ( a [ 1 ] ) ; } else { plus . add ( a [ 1 ] ) ; } } else { minus . add ( a [ 1 ] ) ; } } else { plus . add ( a [ 0 ] ) ; if ( syncedEnd > MathUtils . TWO_PI ) { final double plusToMinus = MathUtils . TWO_PI + arcOffset ; plus . add ( plusToMinus ) ; minus . add ( plusToMinus ) ; if ( syncedEnd > MathUtils . TWO_PI + arcLength ) { final double minusToPlus = MathUtils . TWO_PI + arcLength + arcOffset ; minus . add ( minusToPlus ) ; plus . add ( minusToPlus ) ; plus . add ( a [ 1 ] ) ; } else { minus . add ( a [ 1 ] ) ; } } else { plus . add ( a [ 1 ] ) ; } } } return new Split ( createSplitPart ( plus ) , createSplitPart ( minus ) ) ; }
split the instance in two parts by an arc .
