@@ -3306,7 +3306,7 @@ d3 = function() {
33063306 return stream ;
33073307 }
33083308 function d3_geo_resample ( project ) {
3309- var δ2 = .5 , cosMinDistance = Math . cos ( 1 * d3_radians ) , maxDepth = 16 ;
3309+ var δ2 = .5 , cosMinDistance = Math . cos ( 30 * d3_radians ) , maxDepth = 16 ;
33103310 function resample ( stream ) {
33113311 var λ00 , φ00 , x00 , y00 , a00 , b00 , c00 , λ0 , x0 , y0 , a0 , b0 , c0 ;
33123312 var resample = {
@@ -3332,9 +3332,8 @@ d3 = function() {
33323332 stream . lineStart ( ) ;
33333333 }
33343334 function linePoint ( λ , φ ) {
3335- var c = d3_geo_cartesian ( [ λ , φ ] ) , p = project ( λ , φ ) , buffer = [ ] ;
3336- resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x0 = p [ 0 ] , y0 = p [ 1 ] , λ0 = λ , a0 = c [ 0 ] , b0 = c [ 1 ] , c0 = c [ 2 ] , maxDepth , buffer ) ;
3337- streamLine ( buffer , stream ) ;
3335+ var c = d3_geo_cartesian ( [ λ , φ ] ) , p = project ( λ , φ ) ;
3336+ resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x0 = p [ 0 ] , y0 = p [ 1 ] , λ0 = λ , a0 = c [ 0 ] , b0 = c [ 1 ] , c0 = c [ 2 ] , maxDepth , stream ) ;
33383337 stream . point ( x0 , y0 ) ;
33393338 }
33403339 function lineEnd ( ) {
@@ -3351,28 +3350,20 @@ d3 = function() {
33513350 resample . point = linePoint ;
33523351 }
33533352 function ringEnd ( ) {
3354- var buffer = [ ] ;
3355- resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x00 , y00 , λ00 , a00 , b00 , c00 , maxDepth , buffer ) ;
3356- streamLine ( buffer , stream ) ;
3353+ resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x00 , y00 , λ00 , a00 , b00 , c00 , maxDepth , stream ) ;
33573354 resample . lineEnd = lineEnd ;
33583355 lineEnd ( ) ;
33593356 }
3360- function streamLine ( line , stream ) {
3361- for ( var i = 0 , n = line . length , point ; i < n ; ++ i ) {
3362- stream . point ( ( point = line [ i ] ) [ 0 ] , point [ 1 ] ) ;
3363- }
3364- }
33653357 return resample ;
33663358 }
3367- function resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x1 , y1 , λ1 , a1 , b1 , c1 , depth , buffer ) {
3359+ function resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x1 , y1 , λ1 , a1 , b1 , c1 , depth , stream ) {
33683360 var dx = x1 - x0 , dy = y1 - y0 , d2 = dx * dx + dy * dy ;
33693361 if ( d2 > 4 * δ2 && depth -- ) {
3370- var a = a0 + a1 , b = b0 + b1 , c = c0 + c1 , m = Math . sqrt ( a * a + b * b + c * c ) , φ2 = Math . asin ( c /= m ) , λ2 = Math . abs ( Math . abs ( c ) - 1 ) < ε ? ( λ0 + λ1 ) / 2 : Math . atan2 ( b , a ) , p = project ( λ2 , φ2 ) , x2 = p [ 0 ] , y2 = p [ 1 ] , dx2 = x2 - x0 , dy2 = y2 - y0 , dz = dy * dx2 - dx * dy2 , curve = dz * dz / d2 > δ2 || Math . abs ( ( dx * dx2 + dy * dy2 ) / d2 - .5 ) > .3 ;
3371- if ( curve || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance ) {
3372- var s0 = resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x2 , y2 , λ2 , a /= m , b /= m , c , depth , buffer ) ;
3373- buffer . push ( p ) ;
3374- var s1 = resampleLineTo ( x2 , y2 , λ2 , a , b , c , x1 , y1 , λ1 , a1 , b1 , c1 , depth , buffer ) ;
3375- return curve || s0 || s1 || ( buffer . pop ( ) , false ) ;
3362+ var a = a0 + a1 , b = b0 + b1 , c = c0 + c1 , m = Math . sqrt ( a * a + b * b + c * c ) , φ2 = Math . asin ( c /= m ) , λ2 = Math . abs ( Math . abs ( c ) - 1 ) < ε ? ( λ0 + λ1 ) / 2 : Math . atan2 ( b , a ) , p = project ( λ2 , φ2 ) , x2 = p [ 0 ] , y2 = p [ 1 ] , dx2 = x2 - x0 , dy2 = y2 - y0 , dz = dy * dx2 - dx * dy2 ;
3363+ if ( dz * dz / d2 > δ2 || Math . abs ( ( dx * dx2 + dy * dy2 ) / d2 - .5 ) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance ) {
3364+ resampleLineTo ( x0 , y0 , λ0 , a0 , b0 , c0 , x2 , y2 , λ2 , a /= m , b /= m , c , depth , stream ) ;
3365+ stream . point ( x2 , y2 ) ;
3366+ resampleLineTo ( x2 , y2 , λ2 , a , b , c , x1 , y1 , λ1 , a1 , b1 , c1 , depth , stream ) ;
33763367 }
33773368 }
33783369 }
0 commit comments