Esempio n. 1
0
    toPiecewiseLinearOrArcRecursion: function( options, minLevels, maxLevels, segments, startT, endT, startPoint, endPoint, startCurvature, endCurvature ) {
      var middleT = ( startT + endT ) / 2;
      var middlePoint = this.positionAt( middleT );
      var middleCurvature = this.curvatureAt( middleT );

      if ( maxLevels <= 0 || ( minLevels <= 0 && Math.abs( startCurvature - middleCurvature ) + Math.abs( middleCurvature - endCurvature ) < options.curvatureThreshold * 2 ) ) {
        var segment = kite.Arc.createFromPoints( startPoint, middlePoint, endPoint );
        var needsSplit = false;
        if ( segment instanceof kite.Arc ) {
          var radiusSquared = segment.radius * segment.radius;
          for ( var i = 0; i < options.errorPoints.length; i++ ) {
            var t = options.errorPoints[ i ];
            var point = this.positionAt( startT * ( 1 - t ) + endT * t );
            if ( Math.abs( point.distanceSquared( segment.center ) - radiusSquared ) > options.errorThreshold ) {
              needsSplit = true;
              break;
            }
          }
        }
        if ( !needsSplit ) {
          segments.push( segment );
          return;
        }
      }
      this.toPiecewiseLinearOrArcRecursion( options, minLevels - 1, maxLevels - 1, segments,
        startT, middleT,
        startPoint, middlePoint,
        startCurvature, middleCurvature );
      this.toPiecewiseLinearOrArcRecursion( options, minLevels - 1, maxLevels - 1, segments,
        middleT, endT,
        middlePoint, endPoint,
        middleCurvature, endCurvature );
    },
Esempio n. 2
0
 Segment.intersect = function( a, b ) {
   if ( kite.Line && a instanceof kite.Line && b instanceof kite.Line ) {
     return kite.Line.intersect( a, b );
   }
   else if ( kite.Line && a instanceof kite.Line ) {
     return kite.Line.intersectOther( a, b );
   }
   else if ( kite.Line && b instanceof kite.Line ) {
     // need to swap our intersections, since 'b' is the line
     return kite.Line.intersectOther( b, a ).map( swapSegmentIntersection );
   }
   else if ( kite.Arc && a instanceof kite.Arc && b instanceof kite.Arc ) {
     return kite.Arc.intersect( a, b );
   }
   else {
     return BoundsIntersection.intersect( a, b );
   }
 };