Skip to content

Commit bbb74f7

Browse files
committed
Much larger angular threshold.
Also, disable buffering to discard samples; all samples are retained.
1 parent 3f8097d commit bbb74f7

3 files changed

Lines changed: 27 additions & 45 deletions

File tree

d3.js

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)