public void curveTo(double x1,double y1,double x2,double y2,double x3,double y3){
  if (size() == 0) {
    throw new IllegalPathStateException("curveTo only allowed when not empty");
  }
  Node lastPoint=get(size() - 1);
  lastPoint.mask|=C2_MASK;
  lastPoint.x[2]=x1;
  lastPoint.y[2]=y1;
  if ((lastPoint.mask & C1C2_MASK) == C1C2_MASK) {
    lastPoint.keepColinear=Math.abs(Geom.angle(lastPoint.x[0],lastPoint.y[0],lastPoint.x[1],lastPoint.y[1]) - Geom.angle(lastPoint.x[2],lastPoint.y[2],lastPoint.x[0],lastPoint.y[0])) < 0.001;
  }
  add(new Node(C1_MASK,x3,y3,x2,y2,x3,y3));
}

public void curveTo ( double x1 , double y1 , double x2 , double y2 , double x3 , double y3 ) { if ( size ( ) == 0 ) { throw new IllegalPathStateException ( "curveTo only allowed when not empty" ) ; } Node lastPoint = get ( size ( ) - 1 ) ; lastPoint . mask |= C2_MASK ; lastPoint . x [ 2 ] = x1 ; lastPoint . y [ 2 ] = y1 ; if ( ( lastPoint . mask & C1C2_MASK ) == C1C2_MASK ) { lastPoint . keepColinear = Math . abs ( Geom . angle ( lastPoint . x [ 0 ] , lastPoint . y [ 0 ] , lastPoint . x [ 1 ] , lastPoint . y [ 1 ] ) - Geom . angle ( lastPoint . x [ 2 ] , lastPoint . y [ 2 ] , lastPoint . x [ 0 ] , lastPoint . y [ 0 ] ) ) < 0.001 ; } add ( new Node ( C1_MASK , x3 , y3 , x2 , y2 , x3 , y3 ) ) ; }
adds a cubic curve to the bezier path . < p > this is a convenience method for adding a node with control point c0 and c1 ( incoming curve ) to the bezier path , and also specifying the control point c2 ( outgoing curve ) of the previous node . < p > the bezier path must already have at least one node .
