Comparing version 1.0.2 to 1.0.3
@@ -1,2 +0,2 @@ | ||
// https://d3js.org/d3-shape/ Version 1.0.2. Copyright 2016 Mike Bostock. | ||
// https://d3js.org/d3-shape/ Version 1.0.3. Copyright 2016 Mike Bostock. | ||
(function (global, factory) { | ||
@@ -6,1811 +6,1811 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-path')) : | ||
(factory((global.d3 = global.d3 || {}),global.d3)); | ||
}(this, function (exports,d3Path) { 'use strict'; | ||
}(this, (function (exports,d3Path) { 'use strict'; | ||
function constant(x) { | ||
return function constant() { | ||
return x; | ||
}; | ||
} | ||
function constant(x) { | ||
return function constant() { | ||
return x; | ||
}; | ||
} | ||
var epsilon = 1e-12; | ||
var pi = Math.PI; | ||
var halfPi = pi / 2; | ||
var tau = 2 * pi; | ||
var epsilon = 1e-12; | ||
var pi = Math.PI; | ||
var halfPi = pi / 2; | ||
var tau = 2 * pi; | ||
function arcInnerRadius(d) { | ||
return d.innerRadius; | ||
} | ||
function arcInnerRadius(d) { | ||
return d.innerRadius; | ||
} | ||
function arcOuterRadius(d) { | ||
return d.outerRadius; | ||
} | ||
function arcOuterRadius(d) { | ||
return d.outerRadius; | ||
} | ||
function arcStartAngle(d) { | ||
return d.startAngle; | ||
} | ||
function arcStartAngle(d) { | ||
return d.startAngle; | ||
} | ||
function arcEndAngle(d) { | ||
return d.endAngle; | ||
} | ||
function arcEndAngle(d) { | ||
return d.endAngle; | ||
} | ||
function arcPadAngle(d) { | ||
return d && d.padAngle; // Note: optional! | ||
} | ||
function arcPadAngle(d) { | ||
return d && d.padAngle; // Note: optional! | ||
} | ||
function asin(x) { | ||
return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); | ||
} | ||
function asin(x) { | ||
return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); | ||
} | ||
function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { | ||
var x10 = x1 - x0, y10 = y1 - y0, | ||
x32 = x3 - x2, y32 = y3 - y2, | ||
t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); | ||
return [x0 + t * x10, y0 + t * y10]; | ||
} | ||
function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { | ||
var x10 = x1 - x0, y10 = y1 - y0, | ||
x32 = x3 - x2, y32 = y3 - y2, | ||
t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); | ||
return [x0 + t * x10, y0 + t * y10]; | ||
} | ||
// Compute perpendicular offset line of length rc. | ||
// http://mathworld.wolfram.com/Circle-LineIntersection.html | ||
function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { | ||
var x01 = x0 - x1, | ||
y01 = y0 - y1, | ||
lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), | ||
ox = lo * y01, | ||
oy = -lo * x01, | ||
x11 = x0 + ox, | ||
y11 = y0 + oy, | ||
x10 = x1 + ox, | ||
y10 = y1 + oy, | ||
x00 = (x11 + x10) / 2, | ||
y00 = (y11 + y10) / 2, | ||
dx = x10 - x11, | ||
dy = y10 - y11, | ||
d2 = dx * dx + dy * dy, | ||
r = r1 - rc, | ||
D = x11 * y10 - x10 * y11, | ||
d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), | ||
cx0 = (D * dy - dx * d) / d2, | ||
cy0 = (-D * dx - dy * d) / d2, | ||
cx1 = (D * dy + dx * d) / d2, | ||
cy1 = (-D * dx + dy * d) / d2, | ||
dx0 = cx0 - x00, | ||
dy0 = cy0 - y00, | ||
dx1 = cx1 - x00, | ||
dy1 = cy1 - y00; | ||
// Compute perpendicular offset line of length rc. | ||
// http://mathworld.wolfram.com/Circle-LineIntersection.html | ||
function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { | ||
var x01 = x0 - x1, | ||
y01 = y0 - y1, | ||
lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), | ||
ox = lo * y01, | ||
oy = -lo * x01, | ||
x11 = x0 + ox, | ||
y11 = y0 + oy, | ||
x10 = x1 + ox, | ||
y10 = y1 + oy, | ||
x00 = (x11 + x10) / 2, | ||
y00 = (y11 + y10) / 2, | ||
dx = x10 - x11, | ||
dy = y10 - y11, | ||
d2 = dx * dx + dy * dy, | ||
r = r1 - rc, | ||
D = x11 * y10 - x10 * y11, | ||
d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), | ||
cx0 = (D * dy - dx * d) / d2, | ||
cy0 = (-D * dx - dy * d) / d2, | ||
cx1 = (D * dy + dx * d) / d2, | ||
cy1 = (-D * dx + dy * d) / d2, | ||
dx0 = cx0 - x00, | ||
dy0 = cy0 - y00, | ||
dx1 = cx1 - x00, | ||
dy1 = cy1 - y00; | ||
// Pick the closer of the two intersection points. | ||
// TODO Is there a faster way to determine which intersection to use? | ||
if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; | ||
// Pick the closer of the two intersection points. | ||
// TODO Is there a faster way to determine which intersection to use? | ||
if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; | ||
return { | ||
cx: cx0, | ||
cy: cy0, | ||
x01: -ox, | ||
y01: -oy, | ||
x11: cx0 * (r1 / r - 1), | ||
y11: cy0 * (r1 / r - 1) | ||
}; | ||
} | ||
return { | ||
cx: cx0, | ||
cy: cy0, | ||
x01: -ox, | ||
y01: -oy, | ||
x11: cx0 * (r1 / r - 1), | ||
y11: cy0 * (r1 / r - 1) | ||
}; | ||
} | ||
function arc() { | ||
var innerRadius = arcInnerRadius, | ||
outerRadius = arcOuterRadius, | ||
cornerRadius = constant(0), | ||
padRadius = null, | ||
startAngle = arcStartAngle, | ||
endAngle = arcEndAngle, | ||
padAngle = arcPadAngle, | ||
context = null; | ||
function arc() { | ||
var innerRadius = arcInnerRadius, | ||
outerRadius = arcOuterRadius, | ||
cornerRadius = constant(0), | ||
padRadius = null, | ||
startAngle = arcStartAngle, | ||
endAngle = arcEndAngle, | ||
padAngle = arcPadAngle, | ||
context = null; | ||
var buffer, | ||
r, | ||
r0 = +innerRadius.apply(this, arguments), | ||
r1 = +outerRadius.apply(this, arguments), | ||
a0 = startAngle.apply(this, arguments) - halfPi, | ||
a1 = endAngle.apply(this, arguments) - halfPi, | ||
da = Math.abs(a1 - a0), | ||
cw = a1 > a0; | ||
function arc() { | ||
var buffer, | ||
r, | ||
r0 = +innerRadius.apply(this, arguments), | ||
r1 = +outerRadius.apply(this, arguments), | ||
a0 = startAngle.apply(this, arguments) - halfPi, | ||
a1 = endAngle.apply(this, arguments) - halfPi, | ||
da = Math.abs(a1 - a0), | ||
cw = a1 > a0; | ||
if (!context) context = buffer = d3Path.path(); | ||
if (!context) context = buffer = d3Path.path(); | ||
// Ensure that the outer radius is always larger than the inner radius. | ||
if (r1 < r0) r = r1, r1 = r0, r0 = r; | ||
// Ensure that the outer radius is always larger than the inner radius. | ||
if (r1 < r0) r = r1, r1 = r0, r0 = r; | ||
// Is it a point? | ||
if (!(r1 > epsilon)) context.moveTo(0, 0); | ||
// Is it a point? | ||
if (!(r1 > epsilon)) context.moveTo(0, 0); | ||
// Or is it a circle or annulus? | ||
else if (da > tau - epsilon) { | ||
context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0)); | ||
context.arc(0, 0, r1, a0, a1, !cw); | ||
if (r0 > epsilon) { | ||
context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1)); | ||
context.arc(0, 0, r0, a1, a0, cw); | ||
} | ||
// Or is it a circle or annulus? | ||
else if (da > tau - epsilon) { | ||
context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0)); | ||
context.arc(0, 0, r1, a0, a1, !cw); | ||
if (r0 > epsilon) { | ||
context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1)); | ||
context.arc(0, 0, r0, a1, a0, cw); | ||
} | ||
} | ||
// Or is it a circular or annular sector? | ||
else { | ||
var a01 = a0, | ||
a11 = a1, | ||
a00 = a0, | ||
a10 = a1, | ||
da0 = da, | ||
da1 = da, | ||
ap = padAngle.apply(this, arguments) / 2, | ||
rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)), | ||
rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), | ||
rc0 = rc, | ||
rc1 = rc, | ||
t0, | ||
t1; | ||
// Or is it a circular or annular sector? | ||
else { | ||
var a01 = a0, | ||
a11 = a1, | ||
a00 = a0, | ||
a10 = a1, | ||
da0 = da, | ||
da1 = da, | ||
ap = padAngle.apply(this, arguments) / 2, | ||
rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)), | ||
rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), | ||
rc0 = rc, | ||
rc1 = rc, | ||
t0, | ||
t1; | ||
// Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. | ||
if (rp > epsilon) { | ||
var p0 = asin(rp / r0 * Math.sin(ap)), | ||
p1 = asin(rp / r1 * Math.sin(ap)); | ||
if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; | ||
else da0 = 0, a00 = a10 = (a0 + a1) / 2; | ||
if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; | ||
else da1 = 0, a01 = a11 = (a0 + a1) / 2; | ||
} | ||
// Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. | ||
if (rp > epsilon) { | ||
var p0 = asin(rp / r0 * Math.sin(ap)), | ||
p1 = asin(rp / r1 * Math.sin(ap)); | ||
if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; | ||
else da0 = 0, a00 = a10 = (a0 + a1) / 2; | ||
if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; | ||
else da1 = 0, a01 = a11 = (a0 + a1) / 2; | ||
} | ||
var x01 = r1 * Math.cos(a01), | ||
y01 = r1 * Math.sin(a01), | ||
x10 = r0 * Math.cos(a10), | ||
y10 = r0 * Math.sin(a10); | ||
var x01 = r1 * Math.cos(a01), | ||
y01 = r1 * Math.sin(a01), | ||
x10 = r0 * Math.cos(a10), | ||
y10 = r0 * Math.sin(a10); | ||
// Apply rounded corners? | ||
if (rc > epsilon) { | ||
var x11 = r1 * Math.cos(a11), | ||
y11 = r1 * Math.sin(a11), | ||
x00 = r0 * Math.cos(a00), | ||
y00 = r0 * Math.sin(a00); | ||
// Apply rounded corners? | ||
if (rc > epsilon) { | ||
var x11 = r1 * Math.cos(a11), | ||
y11 = r1 * Math.sin(a11), | ||
x00 = r0 * Math.cos(a00), | ||
y00 = r0 * Math.sin(a00); | ||
// Restrict the corner radius according to the sector angle. | ||
if (da < pi) { | ||
var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], | ||
ax = x01 - oc[0], | ||
ay = y01 - oc[1], | ||
bx = x11 - oc[0], | ||
by = y11 - oc[1], | ||
kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), | ||
lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); | ||
rc0 = Math.min(rc, (r0 - lc) / (kc - 1)); | ||
rc1 = Math.min(rc, (r1 - lc) / (kc + 1)); | ||
} | ||
// Restrict the corner radius according to the sector angle. | ||
if (da < pi) { | ||
var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], | ||
ax = x01 - oc[0], | ||
ay = y01 - oc[1], | ||
bx = x11 - oc[0], | ||
by = y11 - oc[1], | ||
kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), | ||
lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); | ||
rc0 = Math.min(rc, (r0 - lc) / (kc - 1)); | ||
rc1 = Math.min(rc, (r1 - lc) / (kc + 1)); | ||
} | ||
} | ||
// Is the sector collapsed to a line? | ||
if (!(da1 > epsilon)) context.moveTo(x01, y01); | ||
// Is the sector collapsed to a line? | ||
if (!(da1 > epsilon)) context.moveTo(x01, y01); | ||
// Does the sector’s outer ring have rounded corners? | ||
else if (rc1 > epsilon) { | ||
t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); | ||
t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); | ||
// Does the sector’s outer ring have rounded corners? | ||
else if (rc1 > epsilon) { | ||
t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); | ||
t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); | ||
context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); | ||
context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); | ||
// Have the corners merged? | ||
if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); | ||
// Have the corners merged? | ||
if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); | ||
// Otherwise, draw the two corners and the ring. | ||
else { | ||
context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); | ||
context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); | ||
context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); | ||
} | ||
// Otherwise, draw the two corners and the ring. | ||
else { | ||
context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); | ||
context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); | ||
context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); | ||
} | ||
} | ||
// Or is the outer ring just a circular arc? | ||
else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); | ||
// Or is the outer ring just a circular arc? | ||
else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); | ||
// Is there no inner ring, and it’s a circular sector? | ||
// Or perhaps it’s an annular sector collapsed due to padding? | ||
if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10); | ||
// Is there no inner ring, and it’s a circular sector? | ||
// Or perhaps it’s an annular sector collapsed due to padding? | ||
if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10); | ||
// Does the sector’s inner ring (or point) have rounded corners? | ||
else if (rc0 > epsilon) { | ||
t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); | ||
t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); | ||
// Does the sector’s inner ring (or point) have rounded corners? | ||
else if (rc0 > epsilon) { | ||
t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); | ||
t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); | ||
context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); | ||
context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); | ||
// Have the corners merged? | ||
if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); | ||
// Have the corners merged? | ||
if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); | ||
// Otherwise, draw the two corners and the ring. | ||
else { | ||
context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); | ||
context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); | ||
context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); | ||
} | ||
// Otherwise, draw the two corners and the ring. | ||
else { | ||
context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); | ||
context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); | ||
context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); | ||
} | ||
// Or is the inner ring just a circular arc? | ||
else context.arc(0, 0, r0, a10, a00, cw); | ||
} | ||
context.closePath(); | ||
if (buffer) return context = null, buffer + "" || null; | ||
// Or is the inner ring just a circular arc? | ||
else context.arc(0, 0, r0, a10, a00, cw); | ||
} | ||
arc.centroid = function() { | ||
var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, | ||
a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2; | ||
return [Math.cos(a) * r, Math.sin(a) * r]; | ||
}; | ||
context.closePath(); | ||
arc.innerRadius = function(_) { | ||
return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius; | ||
}; | ||
if (buffer) return context = null, buffer + "" || null; | ||
} | ||
arc.outerRadius = function(_) { | ||
return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius; | ||
}; | ||
arc.centroid = function() { | ||
var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, | ||
a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2; | ||
return [Math.cos(a) * r, Math.sin(a) * r]; | ||
}; | ||
arc.cornerRadius = function(_) { | ||
return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius; | ||
}; | ||
arc.innerRadius = function(_) { | ||
return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius; | ||
}; | ||
arc.padRadius = function(_) { | ||
return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius; | ||
}; | ||
arc.outerRadius = function(_) { | ||
return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius; | ||
}; | ||
arc.startAngle = function(_) { | ||
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle; | ||
}; | ||
arc.cornerRadius = function(_) { | ||
return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius; | ||
}; | ||
arc.endAngle = function(_) { | ||
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle; | ||
}; | ||
arc.padRadius = function(_) { | ||
return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius; | ||
}; | ||
arc.padAngle = function(_) { | ||
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle; | ||
}; | ||
arc.startAngle = function(_) { | ||
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle; | ||
}; | ||
arc.context = function(_) { | ||
return arguments.length ? ((context = _ == null ? null : _), arc) : context; | ||
}; | ||
arc.endAngle = function(_) { | ||
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle; | ||
}; | ||
return arc; | ||
} | ||
arc.padAngle = function(_) { | ||
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle; | ||
}; | ||
function Linear(context) { | ||
this._context = context; | ||
} | ||
Linear.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; // proceed | ||
default: this._context.lineTo(x, y); break; | ||
} | ||
} | ||
arc.context = function(_) { | ||
return arguments.length ? ((context = _ == null ? null : _), arc) : context; | ||
}; | ||
function curveLinear(context) { | ||
return new Linear(context); | ||
} | ||
return arc; | ||
} | ||
function x(p) { | ||
return p[0]; | ||
} | ||
function Linear(context) { | ||
this._context = context; | ||
} | ||
function y(p) { | ||
return p[1]; | ||
Linear.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; // proceed | ||
default: this._context.lineTo(x, y); break; | ||
} | ||
} | ||
}; | ||
function line() { | ||
var x$$ = x, | ||
y$$ = y, | ||
defined = constant(true), | ||
context = null, | ||
curve = curveLinear, | ||
output = null; | ||
function curveLinear(context) { | ||
return new Linear(context); | ||
} | ||
function line(data) { | ||
var i, | ||
n = data.length, | ||
d, | ||
defined0 = false, | ||
buffer; | ||
function x(p) { | ||
return p[0]; | ||
} | ||
if (context == null) output = curve(buffer = d3Path.path()); | ||
function y(p) { | ||
return p[1]; | ||
} | ||
for (i = 0; i <= n; ++i) { | ||
if (!(i < n && defined(d = data[i], i, data)) === defined0) { | ||
if (defined0 = !defined0) output.lineStart(); | ||
else output.lineEnd(); | ||
} | ||
if (defined0) output.point(+x$$(d, i, data), +y$$(d, i, data)); | ||
function line() { | ||
var x$$ = x, | ||
y$$ = y, | ||
defined = constant(true), | ||
context = null, | ||
curve = curveLinear, | ||
output = null; | ||
function line(data) { | ||
var i, | ||
n = data.length, | ||
d, | ||
defined0 = false, | ||
buffer; | ||
if (context == null) output = curve(buffer = d3Path.path()); | ||
for (i = 0; i <= n; ++i) { | ||
if (!(i < n && defined(d = data[i], i, data)) === defined0) { | ||
if (defined0 = !defined0) output.lineStart(); | ||
else output.lineEnd(); | ||
} | ||
if (buffer) return output = null, buffer + "" || null; | ||
if (defined0) output.point(+x$$(d, i, data), +y$$(d, i, data)); | ||
} | ||
line.x = function(_) { | ||
return arguments.length ? (x$$ = typeof _ === "function" ? _ : constant(+_), line) : x$$; | ||
}; | ||
if (buffer) return output = null, buffer + "" || null; | ||
} | ||
line.y = function(_) { | ||
return arguments.length ? (y$$ = typeof _ === "function" ? _ : constant(+_), line) : y$$; | ||
}; | ||
line.x = function(_) { | ||
return arguments.length ? (x$$ = typeof _ === "function" ? _ : constant(+_), line) : x$$; | ||
}; | ||
line.defined = function(_) { | ||
return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined; | ||
}; | ||
line.y = function(_) { | ||
return arguments.length ? (y$$ = typeof _ === "function" ? _ : constant(+_), line) : y$$; | ||
}; | ||
line.curve = function(_) { | ||
return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; | ||
}; | ||
line.defined = function(_) { | ||
return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined; | ||
}; | ||
line.context = function(_) { | ||
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; | ||
}; | ||
line.curve = function(_) { | ||
return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; | ||
}; | ||
return line; | ||
} | ||
line.context = function(_) { | ||
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; | ||
}; | ||
function area() { | ||
var x0 = x, | ||
x1 = null, | ||
y0 = constant(0), | ||
y1 = y, | ||
defined = constant(true), | ||
context = null, | ||
curve = curveLinear, | ||
output = null; | ||
return line; | ||
} | ||
function area(data) { | ||
var i, | ||
j, | ||
k, | ||
n = data.length, | ||
d, | ||
defined0 = false, | ||
buffer, | ||
x0z = new Array(n), | ||
y0z = new Array(n); | ||
function area() { | ||
var x0 = x, | ||
x1 = null, | ||
y0 = constant(0), | ||
y1 = y, | ||
defined = constant(true), | ||
context = null, | ||
curve = curveLinear, | ||
output = null; | ||
if (context == null) output = curve(buffer = d3Path.path()); | ||
function area(data) { | ||
var i, | ||
j, | ||
k, | ||
n = data.length, | ||
d, | ||
defined0 = false, | ||
buffer, | ||
x0z = new Array(n), | ||
y0z = new Array(n); | ||
for (i = 0; i <= n; ++i) { | ||
if (!(i < n && defined(d = data[i], i, data)) === defined0) { | ||
if (defined0 = !defined0) { | ||
j = i; | ||
output.areaStart(); | ||
output.lineStart(); | ||
} else { | ||
output.lineEnd(); | ||
output.lineStart(); | ||
for (k = i - 1; k >= j; --k) { | ||
output.point(x0z[k], y0z[k]); | ||
} | ||
output.lineEnd(); | ||
output.areaEnd(); | ||
if (context == null) output = curve(buffer = d3Path.path()); | ||
for (i = 0; i <= n; ++i) { | ||
if (!(i < n && defined(d = data[i], i, data)) === defined0) { | ||
if (defined0 = !defined0) { | ||
j = i; | ||
output.areaStart(); | ||
output.lineStart(); | ||
} else { | ||
output.lineEnd(); | ||
output.lineStart(); | ||
for (k = i - 1; k >= j; --k) { | ||
output.point(x0z[k], y0z[k]); | ||
} | ||
output.lineEnd(); | ||
output.areaEnd(); | ||
} | ||
if (defined0) { | ||
x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); | ||
output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); | ||
} | ||
} | ||
if (buffer) return output = null, buffer + "" || null; | ||
if (defined0) { | ||
x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); | ||
output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); | ||
} | ||
} | ||
function arealine() { | ||
return line().defined(defined).curve(curve).context(context); | ||
} | ||
if (buffer) return output = null, buffer + "" || null; | ||
} | ||
area.x = function(_) { | ||
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0; | ||
}; | ||
function arealine() { | ||
return line().defined(defined).curve(curve).context(context); | ||
} | ||
area.x0 = function(_) { | ||
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0; | ||
}; | ||
area.x = function(_) { | ||
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0; | ||
}; | ||
area.x1 = function(_) { | ||
return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1; | ||
}; | ||
area.x0 = function(_) { | ||
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0; | ||
}; | ||
area.y = function(_) { | ||
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0; | ||
}; | ||
area.x1 = function(_) { | ||
return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1; | ||
}; | ||
area.y0 = function(_) { | ||
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0; | ||
}; | ||
area.y = function(_) { | ||
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0; | ||
}; | ||
area.y1 = function(_) { | ||
return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1; | ||
}; | ||
area.y0 = function(_) { | ||
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0; | ||
}; | ||
area.lineX0 = | ||
area.lineY0 = function() { | ||
return arealine().x(x0).y(y0); | ||
}; | ||
area.y1 = function(_) { | ||
return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1; | ||
}; | ||
area.lineY1 = function() { | ||
return arealine().x(x0).y(y1); | ||
}; | ||
area.lineX0 = | ||
area.lineY0 = function() { | ||
return arealine().x(x0).y(y0); | ||
}; | ||
area.lineX1 = function() { | ||
return arealine().x(x1).y(y0); | ||
}; | ||
area.lineY1 = function() { | ||
return arealine().x(x0).y(y1); | ||
}; | ||
area.defined = function(_) { | ||
return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined; | ||
}; | ||
area.lineX1 = function() { | ||
return arealine().x(x1).y(y0); | ||
}; | ||
area.curve = function(_) { | ||
return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; | ||
}; | ||
area.defined = function(_) { | ||
return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined; | ||
}; | ||
area.context = function(_) { | ||
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; | ||
}; | ||
area.curve = function(_) { | ||
return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; | ||
}; | ||
return area; | ||
} | ||
area.context = function(_) { | ||
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; | ||
}; | ||
function descending(a, b) { | ||
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; | ||
} | ||
return area; | ||
} | ||
function identity(d) { | ||
return d; | ||
} | ||
function descending(a, b) { | ||
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; | ||
} | ||
function pie() { | ||
var value = identity, | ||
sortValues = descending, | ||
sort = null, | ||
startAngle = constant(0), | ||
endAngle = constant(tau), | ||
padAngle = constant(0); | ||
function identity(d) { | ||
return d; | ||
} | ||
function pie(data) { | ||
var i, | ||
n = data.length, | ||
j, | ||
k, | ||
sum = 0, | ||
index = new Array(n), | ||
arcs = new Array(n), | ||
a0 = +startAngle.apply(this, arguments), | ||
da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)), | ||
a1, | ||
p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), | ||
pa = p * (da < 0 ? -1 : 1), | ||
v; | ||
function pie() { | ||
var value = identity, | ||
sortValues = descending, | ||
sort = null, | ||
startAngle = constant(0), | ||
endAngle = constant(tau), | ||
padAngle = constant(0); | ||
for (i = 0; i < n; ++i) { | ||
if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { | ||
sum += v; | ||
} | ||
function pie(data) { | ||
var i, | ||
n = data.length, | ||
j, | ||
k, | ||
sum = 0, | ||
index = new Array(n), | ||
arcs = new Array(n), | ||
a0 = +startAngle.apply(this, arguments), | ||
da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)), | ||
a1, | ||
p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), | ||
pa = p * (da < 0 ? -1 : 1), | ||
v; | ||
for (i = 0; i < n; ++i) { | ||
if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { | ||
sum += v; | ||
} | ||
} | ||
// Optionally sort the arcs by previously-computed values or by data. | ||
if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); | ||
else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); | ||
// Optionally sort the arcs by previously-computed values or by data. | ||
if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); | ||
else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); | ||
// Compute the arcs! They are stored in the original data's order. | ||
for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { | ||
j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { | ||
data: data[j], | ||
index: i, | ||
value: v, | ||
startAngle: a0, | ||
endAngle: a1, | ||
padAngle: p | ||
}; | ||
} | ||
return arcs; | ||
// Compute the arcs! They are stored in the original data's order. | ||
for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { | ||
j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { | ||
data: data[j], | ||
index: i, | ||
value: v, | ||
startAngle: a0, | ||
endAngle: a1, | ||
padAngle: p | ||
}; | ||
} | ||
pie.value = function(_) { | ||
return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value; | ||
}; | ||
return arcs; | ||
} | ||
pie.sortValues = function(_) { | ||
return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; | ||
}; | ||
pie.value = function(_) { | ||
return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value; | ||
}; | ||
pie.sort = function(_) { | ||
return arguments.length ? (sort = _, sortValues = null, pie) : sort; | ||
}; | ||
pie.sortValues = function(_) { | ||
return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; | ||
}; | ||
pie.startAngle = function(_) { | ||
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle; | ||
}; | ||
pie.sort = function(_) { | ||
return arguments.length ? (sort = _, sortValues = null, pie) : sort; | ||
}; | ||
pie.endAngle = function(_) { | ||
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle; | ||
}; | ||
pie.startAngle = function(_) { | ||
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle; | ||
}; | ||
pie.padAngle = function(_) { | ||
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle; | ||
}; | ||
pie.endAngle = function(_) { | ||
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle; | ||
}; | ||
return pie; | ||
pie.padAngle = function(_) { | ||
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle; | ||
}; | ||
return pie; | ||
} | ||
var curveRadialLinear = curveRadial(curveLinear); | ||
function Radial(curve) { | ||
this._curve = curve; | ||
} | ||
Radial.prototype = { | ||
areaStart: function() { | ||
this._curve.areaStart(); | ||
}, | ||
areaEnd: function() { | ||
this._curve.areaEnd(); | ||
}, | ||
lineStart: function() { | ||
this._curve.lineStart(); | ||
}, | ||
lineEnd: function() { | ||
this._curve.lineEnd(); | ||
}, | ||
point: function(a, r) { | ||
this._curve.point(r * Math.sin(a), r * -Math.cos(a)); | ||
} | ||
}; | ||
var curveRadialLinear = curveRadial(curveLinear); | ||
function curveRadial(curve) { | ||
function Radial(curve) { | ||
this._curve = curve; | ||
function radial(context) { | ||
return new Radial(curve(context)); | ||
} | ||
Radial.prototype = { | ||
areaStart: function() { | ||
this._curve.areaStart(); | ||
}, | ||
areaEnd: function() { | ||
this._curve.areaEnd(); | ||
}, | ||
lineStart: function() { | ||
this._curve.lineStart(); | ||
}, | ||
lineEnd: function() { | ||
this._curve.lineEnd(); | ||
}, | ||
point: function(a, r) { | ||
this._curve.point(r * Math.sin(a), r * -Math.cos(a)); | ||
} | ||
radial._curve = curve; | ||
return radial; | ||
} | ||
function radialLine(l) { | ||
var c = l.curve; | ||
l.angle = l.x, delete l.x; | ||
l.radius = l.y, delete l.y; | ||
l.curve = function(_) { | ||
return arguments.length ? c(curveRadial(_)) : c()._curve; | ||
}; | ||
function curveRadial(curve) { | ||
return l; | ||
} | ||
function radial(context) { | ||
return new Radial(curve(context)); | ||
} | ||
function radialLine$1() { | ||
return radialLine(line().curve(curveRadialLinear)); | ||
} | ||
radial._curve = curve; | ||
function radialArea() { | ||
var a = area().curve(curveRadialLinear), | ||
c = a.curve, | ||
x0 = a.lineX0, | ||
x1 = a.lineX1, | ||
y0 = a.lineY0, | ||
y1 = a.lineY1; | ||
return radial; | ||
} | ||
a.angle = a.x, delete a.x; | ||
a.startAngle = a.x0, delete a.x0; | ||
a.endAngle = a.x1, delete a.x1; | ||
a.radius = a.y, delete a.y; | ||
a.innerRadius = a.y0, delete a.y0; | ||
a.outerRadius = a.y1, delete a.y1; | ||
a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0; | ||
a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1; | ||
a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0; | ||
a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1; | ||
function radialLine(l) { | ||
var c = l.curve; | ||
a.curve = function(_) { | ||
return arguments.length ? c(curveRadial(_)) : c()._curve; | ||
}; | ||
l.angle = l.x, delete l.x; | ||
l.radius = l.y, delete l.y; | ||
return a; | ||
} | ||
l.curve = function(_) { | ||
return arguments.length ? c(curveRadial(_)) : c()._curve; | ||
}; | ||
var circle = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / pi); | ||
context.moveTo(r, 0); | ||
context.arc(0, 0, r, 0, tau); | ||
} | ||
}; | ||
return l; | ||
var cross = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / 5) / 2; | ||
context.moveTo(-3 * r, -r); | ||
context.lineTo(-r, -r); | ||
context.lineTo(-r, -3 * r); | ||
context.lineTo(r, -3 * r); | ||
context.lineTo(r, -r); | ||
context.lineTo(3 * r, -r); | ||
context.lineTo(3 * r, r); | ||
context.lineTo(r, r); | ||
context.lineTo(r, 3 * r); | ||
context.lineTo(-r, 3 * r); | ||
context.lineTo(-r, r); | ||
context.lineTo(-3 * r, r); | ||
context.closePath(); | ||
} | ||
}; | ||
function radialLine$1() { | ||
return radialLine(line().curve(curveRadialLinear)); | ||
var tan30 = Math.sqrt(1 / 3); | ||
var tan30_2 = tan30 * 2; | ||
var diamond = { | ||
draw: function(context, size) { | ||
var y = Math.sqrt(size / tan30_2), | ||
x = y * tan30; | ||
context.moveTo(0, -y); | ||
context.lineTo(x, 0); | ||
context.lineTo(0, y); | ||
context.lineTo(-x, 0); | ||
context.closePath(); | ||
} | ||
}; | ||
function radialArea() { | ||
var a = area().curve(curveRadialLinear), | ||
c = a.curve, | ||
x0 = a.lineX0, | ||
x1 = a.lineX1, | ||
y0 = a.lineY0, | ||
y1 = a.lineY1; | ||
var ka = 0.89081309152928522810; | ||
var kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10); | ||
var kx = Math.sin(tau / 10) * kr; | ||
var ky = -Math.cos(tau / 10) * kr; | ||
var star = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size * ka), | ||
x = kx * r, | ||
y = ky * r; | ||
context.moveTo(0, -r); | ||
context.lineTo(x, y); | ||
for (var i = 1; i < 5; ++i) { | ||
var a = tau * i / 5, | ||
c = Math.cos(a), | ||
s = Math.sin(a); | ||
context.lineTo(s * r, -c * r); | ||
context.lineTo(c * x - s * y, s * x + c * y); | ||
} | ||
context.closePath(); | ||
} | ||
}; | ||
a.angle = a.x, delete a.x; | ||
a.startAngle = a.x0, delete a.x0; | ||
a.endAngle = a.x1, delete a.x1; | ||
a.radius = a.y, delete a.y; | ||
a.innerRadius = a.y0, delete a.y0; | ||
a.outerRadius = a.y1, delete a.y1; | ||
a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0; | ||
a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1; | ||
a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0; | ||
a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1; | ||
var square = { | ||
draw: function(context, size) { | ||
var w = Math.sqrt(size), | ||
x = -w / 2; | ||
context.rect(x, x, w, w); | ||
} | ||
}; | ||
a.curve = function(_) { | ||
return arguments.length ? c(curveRadial(_)) : c()._curve; | ||
}; | ||
var sqrt3 = Math.sqrt(3); | ||
return a; | ||
var triangle = { | ||
draw: function(context, size) { | ||
var y = -Math.sqrt(size / (sqrt3 * 3)); | ||
context.moveTo(0, y * 2); | ||
context.lineTo(-sqrt3 * y, -y); | ||
context.lineTo(sqrt3 * y, -y); | ||
context.closePath(); | ||
} | ||
}; | ||
var circle = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / pi); | ||
context.moveTo(r, 0); | ||
context.arc(0, 0, r, 0, tau); | ||
} | ||
}; | ||
var c = -0.5; | ||
var s = Math.sqrt(3) / 2; | ||
var k = 1 / Math.sqrt(12); | ||
var a = (k / 2 + 1) * 3; | ||
var wye = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / a), | ||
x0 = r / 2, | ||
y0 = r * k, | ||
x1 = x0, | ||
y1 = r * k + r, | ||
x2 = -x1, | ||
y2 = y1; | ||
context.moveTo(x0, y0); | ||
context.lineTo(x1, y1); | ||
context.lineTo(x2, y2); | ||
context.lineTo(c * x0 - s * y0, s * x0 + c * y0); | ||
context.lineTo(c * x1 - s * y1, s * x1 + c * y1); | ||
context.lineTo(c * x2 - s * y2, s * x2 + c * y2); | ||
context.lineTo(c * x0 + s * y0, c * y0 - s * x0); | ||
context.lineTo(c * x1 + s * y1, c * y1 - s * x1); | ||
context.lineTo(c * x2 + s * y2, c * y2 - s * x2); | ||
context.closePath(); | ||
} | ||
}; | ||
var cross = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / 5) / 2; | ||
context.moveTo(-3 * r, -r); | ||
context.lineTo(-r, -r); | ||
context.lineTo(-r, -3 * r); | ||
context.lineTo(r, -3 * r); | ||
context.lineTo(r, -r); | ||
context.lineTo(3 * r, -r); | ||
context.lineTo(3 * r, r); | ||
context.lineTo(r, r); | ||
context.lineTo(r, 3 * r); | ||
context.lineTo(-r, 3 * r); | ||
context.lineTo(-r, r); | ||
context.lineTo(-3 * r, r); | ||
context.closePath(); | ||
} | ||
}; | ||
var symbols = [ | ||
circle, | ||
cross, | ||
diamond, | ||
square, | ||
star, | ||
triangle, | ||
wye | ||
]; | ||
var tan30 = Math.sqrt(1 / 3); | ||
var tan30_2 = tan30 * 2; | ||
var diamond = { | ||
draw: function(context, size) { | ||
var y = Math.sqrt(size / tan30_2), | ||
x = y * tan30; | ||
context.moveTo(0, -y); | ||
context.lineTo(x, 0); | ||
context.lineTo(0, y); | ||
context.lineTo(-x, 0); | ||
context.closePath(); | ||
} | ||
}; | ||
function symbol() { | ||
var type = constant(circle), | ||
size = constant(64), | ||
context = null; | ||
var ka = 0.89081309152928522810; | ||
var kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10); | ||
var kx = Math.sin(tau / 10) * kr; | ||
var ky = -Math.cos(tau / 10) * kr; | ||
var star = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size * ka), | ||
x = kx * r, | ||
y = ky * r; | ||
context.moveTo(0, -r); | ||
context.lineTo(x, y); | ||
for (var i = 1; i < 5; ++i) { | ||
var a = tau * i / 5, | ||
c = Math.cos(a), | ||
s = Math.sin(a); | ||
context.lineTo(s * r, -c * r); | ||
context.lineTo(c * x - s * y, s * x + c * y); | ||
} | ||
context.closePath(); | ||
} | ||
}; | ||
function symbol() { | ||
var buffer; | ||
if (!context) context = buffer = d3Path.path(); | ||
type.apply(this, arguments).draw(context, +size.apply(this, arguments)); | ||
if (buffer) return context = null, buffer + "" || null; | ||
} | ||
var square = { | ||
draw: function(context, size) { | ||
var w = Math.sqrt(size), | ||
x = -w / 2; | ||
context.rect(x, x, w, w); | ||
} | ||
symbol.type = function(_) { | ||
return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type; | ||
}; | ||
var sqrt3 = Math.sqrt(3); | ||
var triangle = { | ||
draw: function(context, size) { | ||
var y = -Math.sqrt(size / (sqrt3 * 3)); | ||
context.moveTo(0, y * 2); | ||
context.lineTo(-sqrt3 * y, -y); | ||
context.lineTo(sqrt3 * y, -y); | ||
context.closePath(); | ||
} | ||
symbol.size = function(_) { | ||
return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size; | ||
}; | ||
var c = -0.5; | ||
var s = Math.sqrt(3) / 2; | ||
var k = 1 / Math.sqrt(12); | ||
var a = (k / 2 + 1) * 3; | ||
var wye = { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size / a), | ||
x0 = r / 2, | ||
y0 = r * k, | ||
x1 = x0, | ||
y1 = r * k + r, | ||
x2 = -x1, | ||
y2 = y1; | ||
context.moveTo(x0, y0); | ||
context.lineTo(x1, y1); | ||
context.lineTo(x2, y2); | ||
context.lineTo(c * x0 - s * y0, s * x0 + c * y0); | ||
context.lineTo(c * x1 - s * y1, s * x1 + c * y1); | ||
context.lineTo(c * x2 - s * y2, s * x2 + c * y2); | ||
context.lineTo(c * x0 + s * y0, c * y0 - s * x0); | ||
context.lineTo(c * x1 + s * y1, c * y1 - s * x1); | ||
context.lineTo(c * x2 + s * y2, c * y2 - s * x2); | ||
context.closePath(); | ||
} | ||
symbol.context = function(_) { | ||
return arguments.length ? (context = _ == null ? null : _, symbol) : context; | ||
}; | ||
var symbols = [ | ||
circle, | ||
cross, | ||
diamond, | ||
square, | ||
star, | ||
triangle, | ||
wye | ||
]; | ||
return symbol; | ||
} | ||
function symbol() { | ||
var type = constant(circle), | ||
size = constant(64), | ||
context = null; | ||
function noop() {} | ||
function symbol() { | ||
var buffer; | ||
if (!context) context = buffer = d3Path.path(); | ||
type.apply(this, arguments).draw(context, +size.apply(this, arguments)); | ||
if (buffer) return context = null, buffer + "" || null; | ||
} | ||
function point(that, x, y) { | ||
that._context.bezierCurveTo( | ||
(2 * that._x0 + that._x1) / 3, | ||
(2 * that._y0 + that._y1) / 3, | ||
(that._x0 + 2 * that._x1) / 3, | ||
(that._y0 + 2 * that._y1) / 3, | ||
(that._x0 + 4 * that._x1 + x) / 6, | ||
(that._y0 + 4 * that._y1 + y) / 6 | ||
); | ||
} | ||
symbol.type = function(_) { | ||
return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type; | ||
}; | ||
function Basis(context) { | ||
this._context = context; | ||
} | ||
symbol.size = function(_) { | ||
return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size; | ||
}; | ||
symbol.context = function(_) { | ||
return arguments.length ? (context = _ == null ? null : _, symbol) : context; | ||
}; | ||
return symbol; | ||
Basis.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 3: point(this, this._x1, this._y1); // proceed | ||
case 2: this._context.lineTo(this._x1, this._y1); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed | ||
default: point(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
} | ||
}; | ||
function noop() {} | ||
function basis(context) { | ||
return new Basis(context); | ||
} | ||
function point(that, x, y) { | ||
that._context.bezierCurveTo( | ||
(2 * that._x0 + that._x1) / 3, | ||
(2 * that._y0 + that._y1) / 3, | ||
(that._x0 + 2 * that._x1) / 3, | ||
(that._y0 + 2 * that._y1) / 3, | ||
(that._x0 + 4 * that._x1 + x) / 6, | ||
(that._y0 + 4 * that._y1 + y) / 6 | ||
); | ||
} | ||
function BasisClosed(context) { | ||
this._context = context; | ||
} | ||
function Basis(context) { | ||
this._context = context; | ||
} | ||
Basis.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 3: point(this, this._x1, this._y1); // proceed | ||
case 2: this._context.lineTo(this._x1, this._y1); break; | ||
BasisClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x2, this._y2); | ||
this._context.closePath(); | ||
break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed | ||
default: point(this, x, y); break; | ||
case 2: { | ||
this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); | ||
this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
case 3: { | ||
this.point(this._x2, this._y2); | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
break; | ||
} | ||
} | ||
}; | ||
function basis(context) { | ||
return new Basis(context); | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x2 = x, this._y2 = y; break; | ||
case 1: this._point = 2; this._x3 = x, this._y3 = y; break; | ||
case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; | ||
default: point(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
} | ||
}; | ||
function BasisClosed(context) { | ||
this._context = context; | ||
} | ||
function basisClosed(context) { | ||
return new BasisClosed(context); | ||
} | ||
BasisClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x2, this._y2); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 2: { | ||
this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); | ||
this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 3: { | ||
this.point(this._x2, this._y2); | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
break; | ||
} | ||
} | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x2 = x, this._y2 = y; break; | ||
case 1: this._point = 2; this._x3 = x, this._y3 = y; break; | ||
case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; | ||
default: point(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
function BasisOpen(context) { | ||
this._context = context; | ||
} | ||
BasisOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; | ||
case 3: this._point = 4; // proceed | ||
default: point(this, x, y); break; | ||
} | ||
}; | ||
function basisClosed(context) { | ||
return new BasisClosed(context); | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
} | ||
}; | ||
function BasisOpen(context) { | ||
this._context = context; | ||
} | ||
function basisOpen(context) { | ||
return new BasisOpen(context); | ||
} | ||
BasisOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; | ||
case 3: this._point = 4; // proceed | ||
default: point(this, x, y); break; | ||
function Bundle(context, beta) { | ||
this._basis = new Basis(context); | ||
this._beta = beta; | ||
} | ||
Bundle.prototype = { | ||
lineStart: function() { | ||
this._x = []; | ||
this._y = []; | ||
this._basis.lineStart(); | ||
}, | ||
lineEnd: function() { | ||
var x = this._x, | ||
y = this._y, | ||
j = x.length - 1; | ||
if (j > 0) { | ||
var x0 = x[0], | ||
y0 = y[0], | ||
dx = x[j] - x0, | ||
dy = y[j] - y0, | ||
i = -1, | ||
t; | ||
while (++i <= j) { | ||
t = i / j; | ||
this._basis.point( | ||
this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), | ||
this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) | ||
); | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
} | ||
}; | ||
function basisOpen(context) { | ||
return new BasisOpen(context); | ||
this._x = this._y = null; | ||
this._basis.lineEnd(); | ||
}, | ||
point: function(x, y) { | ||
this._x.push(+x); | ||
this._y.push(+y); | ||
} | ||
}; | ||
function Bundle(context, beta) { | ||
this._basis = new Basis(context); | ||
this._beta = beta; | ||
var bundle = (function custom(beta) { | ||
function bundle(context) { | ||
return beta === 1 ? new Basis(context) : new Bundle(context, beta); | ||
} | ||
Bundle.prototype = { | ||
lineStart: function() { | ||
this._x = []; | ||
this._y = []; | ||
this._basis.lineStart(); | ||
}, | ||
lineEnd: function() { | ||
var x = this._x, | ||
y = this._y, | ||
j = x.length - 1; | ||
bundle.beta = function(beta) { | ||
return custom(+beta); | ||
}; | ||
if (j > 0) { | ||
var x0 = x[0], | ||
y0 = y[0], | ||
dx = x[j] - x0, | ||
dy = y[j] - y0, | ||
i = -1, | ||
t; | ||
return bundle; | ||
})(0.85); | ||
while (++i <= j) { | ||
t = i / j; | ||
this._basis.point( | ||
this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), | ||
this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) | ||
); | ||
} | ||
} | ||
function point$1(that, x, y) { | ||
that._context.bezierCurveTo( | ||
that._x1 + that._k * (that._x2 - that._x0), | ||
that._y1 + that._k * (that._y2 - that._y0), | ||
that._x2 + that._k * (that._x1 - x), | ||
that._y2 + that._k * (that._y1 - y), | ||
that._x2, | ||
that._y2 | ||
); | ||
} | ||
this._x = this._y = null; | ||
this._basis.lineEnd(); | ||
}, | ||
point: function(x, y) { | ||
this._x.push(+x); | ||
this._y.push(+y); | ||
} | ||
}; | ||
function Cardinal(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
} | ||
var bundle = (function custom(beta) { | ||
function bundle(context) { | ||
return beta === 1 ? new Basis(context) : new Bundle(context, beta); | ||
Cardinal.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x2, this._y2); break; | ||
case 3: point$1(this, this._x1, this._y1); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; this._x1 = x, this._y1 = y; break; | ||
case 2: this._point = 3; // proceed | ||
default: point$1(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
bundle.beta = function(beta) { | ||
return custom(+beta); | ||
}; | ||
var cardinal = (function custom(tension) { | ||
return bundle; | ||
})(0.85); | ||
function point$1(that, x, y) { | ||
that._context.bezierCurveTo( | ||
that._x1 + that._k * (that._x2 - that._x0), | ||
that._y1 + that._k * (that._y2 - that._y0), | ||
that._x2 + that._k * (that._x1 - x), | ||
that._y2 + that._k * (that._y1 - y), | ||
that._x2, | ||
that._y2 | ||
); | ||
function cardinal(context) { | ||
return new Cardinal(context, tension); | ||
} | ||
function Cardinal(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
} | ||
Cardinal.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x2, this._y2); break; | ||
case 3: point$1(this, this._x1, this._y1); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; this._x1 = x, this._y1 = y; break; | ||
case 2: this._point = 3; // proceed | ||
default: point$1(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
var cardinal = (function custom(tension) { | ||
return cardinal; | ||
})(0); | ||
function cardinal(context) { | ||
return new Cardinal(context, tension); | ||
} | ||
function CardinalClosed(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
} | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
return cardinal; | ||
})(0); | ||
function CardinalClosed(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
} | ||
CardinalClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 2: { | ||
this._context.lineTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 3: { | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
this.point(this._x5, this._y5); | ||
break; | ||
} | ||
CardinalClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x3 = x, this._y3 = y; break; | ||
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; | ||
case 2: this._point = 3; this._x5 = x, this._y5 = y; break; | ||
default: point$1(this, x, y); break; | ||
case 2: { | ||
this._context.lineTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
case 3: { | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
this.point(this._x5, this._y5); | ||
break; | ||
} | ||
} | ||
}; | ||
var cardinalClosed = (function custom(tension) { | ||
function cardinal(context) { | ||
return new CardinalClosed(context, tension); | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x3 = x, this._y3 = y; break; | ||
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; | ||
case 2: this._point = 3; this._x5 = x, this._y5 = y; break; | ||
default: point$1(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
var cardinalClosed = (function custom(tension) { | ||
return cardinal; | ||
})(0); | ||
function CardinalOpen(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
function cardinal(context) { | ||
return new CardinalClosed(context, tension); | ||
} | ||
CardinalOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; | ||
case 3: this._point = 4; // proceed | ||
default: point$1(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
var cardinalOpen = (function custom(tension) { | ||
return cardinal; | ||
})(0); | ||
function cardinal(context) { | ||
return new CardinalOpen(context, tension); | ||
function CardinalOpen(context, tension) { | ||
this._context = context; | ||
this._k = (1 - tension) / 6; | ||
} | ||
CardinalOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; | ||
case 3: this._point = 4; // proceed | ||
default: point$1(this, x, y); break; | ||
} | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
var cardinalOpen = (function custom(tension) { | ||
return cardinal; | ||
})(0); | ||
function cardinal(context) { | ||
return new CardinalOpen(context, tension); | ||
} | ||
function point$2(that, x, y) { | ||
var x1 = that._x1, | ||
y1 = that._y1, | ||
x2 = that._x2, | ||
y2 = that._y2; | ||
cardinal.tension = function(tension) { | ||
return custom(+tension); | ||
}; | ||
if (that._l01_a > epsilon) { | ||
var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, | ||
n = 3 * that._l01_a * (that._l01_a + that._l12_a); | ||
x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; | ||
y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; | ||
} | ||
return cardinal; | ||
})(0); | ||
if (that._l23_a > epsilon) { | ||
var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, | ||
m = 3 * that._l23_a * (that._l23_a + that._l12_a); | ||
x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; | ||
y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; | ||
} | ||
function point$2(that, x, y) { | ||
var x1 = that._x1, | ||
y1 = that._y1, | ||
x2 = that._x2, | ||
y2 = that._y2; | ||
that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); | ||
if (that._l01_a > epsilon) { | ||
var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, | ||
n = 3 * that._l01_a * (that._l01_a + that._l12_a); | ||
x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; | ||
y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; | ||
} | ||
function CatmullRom(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
if (that._l23_a > epsilon) { | ||
var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, | ||
m = 3 * that._l23_a * (that._l23_a + that._l12_a); | ||
x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; | ||
y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; | ||
} | ||
CatmullRom.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x2, this._y2); break; | ||
case 3: this.point(this, this._x2, this._y2); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); | ||
} | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
function CatmullRom(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
} | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; // proceed | ||
default: point$2(this, x, y); break; | ||
} | ||
CatmullRom.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x2, this._y2); break; | ||
case 3: this.point(this._x2, this._y2); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
}; | ||
var catmullRom = (function custom(alpha) { | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; // proceed | ||
default: point$2(this, x, y); break; | ||
} | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
return catmullRom; | ||
})(0.5); | ||
var catmullRom = (function custom(alpha) { | ||
function CatmullRomClosed(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); | ||
} | ||
CatmullRomClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 2: { | ||
this._context.lineTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 3: { | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
this.point(this._x5, this._y5); | ||
break; | ||
} | ||
} | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
return catmullRom; | ||
})(0.5); | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x3 = x, this._y3 = y; break; | ||
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; | ||
case 2: this._point = 3; this._x5 = x, this._y5 = y; break; | ||
default: point$2(this, x, y); break; | ||
function CatmullRomClosed(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
} | ||
CatmullRomClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = | ||
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 1: { | ||
this._context.moveTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 2: { | ||
this._context.lineTo(this._x3, this._y3); | ||
this._context.closePath(); | ||
break; | ||
} | ||
case 3: { | ||
this.point(this._x3, this._y3); | ||
this.point(this._x4, this._y4); | ||
this.point(this._x5, this._y5); | ||
break; | ||
} | ||
} | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
}; | ||
var catmullRomClosed = (function custom(alpha) { | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); | ||
switch (this._point) { | ||
case 0: this._point = 1; this._x3 = x, this._y3 = y; break; | ||
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; | ||
case 2: this._point = 3; this._x5 = x, this._y5 = y; break; | ||
default: point$2(this, x, y); break; | ||
} | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
return catmullRom; | ||
})(0.5); | ||
var catmullRomClosed = (function custom(alpha) { | ||
function CatmullRomOpen(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); | ||
} | ||
CatmullRomOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
return catmullRom; | ||
})(0.5); | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; | ||
case 3: this._point = 4; // proceed | ||
default: point$2(this, x, y); break; | ||
} | ||
function CatmullRomOpen(context, alpha) { | ||
this._context = context; | ||
this._alpha = alpha; | ||
} | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
CatmullRomOpen.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = this._x2 = | ||
this._y0 = this._y1 = this._y2 = NaN; | ||
this._l01_a = this._l12_a = this._l23_a = | ||
this._l01_2a = this._l12_2a = this._l23_2a = | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
if (this._point) { | ||
var x23 = this._x2 - x, | ||
y23 = this._y2 - y; | ||
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); | ||
} | ||
}; | ||
var catmullRomOpen = (function custom(alpha) { | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); | ||
switch (this._point) { | ||
case 0: this._point = 1; break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; | ||
case 3: this._point = 4; // proceed | ||
default: point$2(this, x, y); break; | ||
} | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
this._l01_a = this._l12_a, this._l12_a = this._l23_a; | ||
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; | ||
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; | ||
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; | ||
} | ||
}; | ||
return catmullRom; | ||
})(0.5); | ||
var catmullRomOpen = (function custom(alpha) { | ||
function LinearClosed(context) { | ||
this._context = context; | ||
function catmullRom(context) { | ||
return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); | ||
} | ||
LinearClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._point) this._context.closePath(); | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
if (this._point) this._context.lineTo(x, y); | ||
else this._point = 1, this._context.moveTo(x, y); | ||
} | ||
catmullRom.alpha = function(alpha) { | ||
return custom(+alpha); | ||
}; | ||
function linearClosed(context) { | ||
return new LinearClosed(context); | ||
} | ||
return catmullRom; | ||
})(0.5); | ||
function sign(x) { | ||
return x < 0 ? -1 : 1; | ||
} | ||
function LinearClosed(context) { | ||
this._context = context; | ||
} | ||
// Calculate the slopes of the tangents (Hermite-type interpolation) based on | ||
// the following paper: Steffen, M. 1990. A Simple Method for Monotonic | ||
// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. | ||
// NOV(II), P. 443, 1990. | ||
function slope3(that, x2, y2) { | ||
var h0 = that._x1 - that._x0, | ||
h1 = x2 - that._x1, | ||
s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), | ||
s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), | ||
p = (s0 * h1 + s1 * h0) / (h0 + h1); | ||
return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; | ||
LinearClosed.prototype = { | ||
areaStart: noop, | ||
areaEnd: noop, | ||
lineStart: function() { | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (this._point) this._context.closePath(); | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
if (this._point) this._context.lineTo(x, y); | ||
else this._point = 1, this._context.moveTo(x, y); | ||
} | ||
}; | ||
// Calculate a one-sided slope. | ||
function slope2(that, t) { | ||
var h = that._x1 - that._x0; | ||
return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; | ||
} | ||
function linearClosed(context) { | ||
return new LinearClosed(context); | ||
} | ||
// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations | ||
// "you can express cubic Hermite interpolation in terms of cubic Bézier curves | ||
// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". | ||
function point$3(that, t0, t1) { | ||
var x0 = that._x0, | ||
y0 = that._y0, | ||
x1 = that._x1, | ||
y1 = that._y1, | ||
dx = (x1 - x0) / 3; | ||
that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); | ||
} | ||
function sign(x) { | ||
return x < 0 ? -1 : 1; | ||
} | ||
function MonotoneX(context) { | ||
this._context = context; | ||
} | ||
// Calculate the slopes of the tangents (Hermite-type interpolation) based on | ||
// the following paper: Steffen, M. 1990. A Simple Method for Monotonic | ||
// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. | ||
// NOV(II), P. 443, 1990. | ||
function slope3(that, x2, y2) { | ||
var h0 = that._x1 - that._x0, | ||
h1 = x2 - that._x1, | ||
s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), | ||
s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), | ||
p = (s0 * h1 + s1 * h0) / (h0 + h1); | ||
return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; | ||
} | ||
MonotoneX.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = | ||
this._t0 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x1, this._y1); break; | ||
case 3: point$3(this, this._t0, slope2(this, this._t0)); break; | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
var t1 = NaN; | ||
// Calculate a one-sided slope. | ||
function slope2(that, t) { | ||
var h = that._x1 - that._x0; | ||
return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; | ||
} | ||
x = +x, y = +y; | ||
if (x === this._x1 && y === this._y1) return; // Ignore coincident points. | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break; | ||
default: point$3(this, this._t0, t1 = slope3(this, x, y)); break; | ||
} | ||
// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations | ||
// "you can express cubic Hermite interpolation in terms of cubic Bézier curves | ||
// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". | ||
function point$3(that, t0, t1) { | ||
var x0 = that._x0, | ||
y0 = that._y0, | ||
x1 = that._x1, | ||
y1 = that._y1, | ||
dx = (x1 - x0) / 3; | ||
that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
this._t0 = t1; | ||
function MonotoneX(context) { | ||
this._context = context; | ||
} | ||
MonotoneX.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x0 = this._x1 = | ||
this._y0 = this._y1 = | ||
this._t0 = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
switch (this._point) { | ||
case 2: this._context.lineTo(this._x1, this._y1); break; | ||
case 3: point$3(this, this._t0, slope2(this, this._t0)); break; | ||
} | ||
} | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
var t1 = NaN; | ||
function MonotoneY(context) { | ||
this._context = new ReflectContext(context); | ||
x = +x, y = +y; | ||
if (x === this._x1 && y === this._y1) return; // Ignore coincident points. | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; break; | ||
case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break; | ||
default: point$3(this, this._t0, t1 = slope3(this, x, y)); break; | ||
} | ||
this._x0 = this._x1, this._x1 = x; | ||
this._y0 = this._y1, this._y1 = y; | ||
this._t0 = t1; | ||
} | ||
} | ||
(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { | ||
MonotoneX.prototype.point.call(this, y, x); | ||
}; | ||
function MonotoneY(context) { | ||
this._context = new ReflectContext(context); | ||
} | ||
function ReflectContext(context) { | ||
this._context = context; | ||
} | ||
(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { | ||
MonotoneX.prototype.point.call(this, y, x); | ||
}; | ||
ReflectContext.prototype = { | ||
moveTo: function(x, y) { this._context.moveTo(y, x); }, | ||
closePath: function() { this._context.closePath(); }, | ||
lineTo: function(x, y) { this._context.lineTo(y, x); }, | ||
bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } | ||
}; | ||
function ReflectContext(context) { | ||
this._context = context; | ||
} | ||
function monotoneX(context) { | ||
return new MonotoneX(context); | ||
} | ||
ReflectContext.prototype = { | ||
moveTo: function(x, y) { this._context.moveTo(y, x); }, | ||
closePath: function() { this._context.closePath(); }, | ||
lineTo: function(x, y) { this._context.lineTo(y, x); }, | ||
bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } | ||
}; | ||
function monotoneY(context) { | ||
return new MonotoneY(context); | ||
} | ||
function monotoneX(context) { | ||
return new MonotoneX(context); | ||
} | ||
function Natural(context) { | ||
this._context = context; | ||
} | ||
function monotoneY(context) { | ||
return new MonotoneY(context); | ||
} | ||
Natural.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x = []; | ||
this._y = []; | ||
}, | ||
lineEnd: function() { | ||
var x = this._x, | ||
y = this._y, | ||
n = x.length; | ||
function Natural(context) { | ||
this._context = context; | ||
} | ||
if (n) { | ||
this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); | ||
if (n === 2) { | ||
this._context.lineTo(x[1], y[1]); | ||
} else { | ||
var px = controlPoints(x), | ||
py = controlPoints(y); | ||
for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { | ||
this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); | ||
} | ||
Natural.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x = []; | ||
this._y = []; | ||
}, | ||
lineEnd: function() { | ||
var x = this._x, | ||
y = this._y, | ||
n = x.length; | ||
if (n) { | ||
this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); | ||
if (n === 2) { | ||
this._context.lineTo(x[1], y[1]); | ||
} else { | ||
var px = controlPoints(x), | ||
py = controlPoints(y); | ||
for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { | ||
this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); | ||
} | ||
} | ||
if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
this._x = this._y = null; | ||
}, | ||
point: function(x, y) { | ||
this._x.push(+x); | ||
this._y.push(+y); | ||
} | ||
}; | ||
// See https://www.particleincell.com/2012/bezier-splines/ for derivation. | ||
function controlPoints(x) { | ||
var i, | ||
n = x.length - 1, | ||
m, | ||
a = new Array(n), | ||
b = new Array(n), | ||
r = new Array(n); | ||
a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; | ||
for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; | ||
a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; | ||
for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; | ||
a[n - 1] = r[n - 1] / b[n - 1]; | ||
for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; | ||
b[n - 1] = (x[n] + a[n - 1]) / 2; | ||
for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; | ||
return [a, b]; | ||
if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); | ||
this._line = 1 - this._line; | ||
this._x = this._y = null; | ||
}, | ||
point: function(x, y) { | ||
this._x.push(+x); | ||
this._y.push(+y); | ||
} | ||
}; | ||
function natural(context) { | ||
return new Natural(context); | ||
} | ||
// See https://www.particleincell.com/2012/bezier-splines/ for derivation. | ||
function controlPoints(x) { | ||
var i, | ||
n = x.length - 1, | ||
m, | ||
a = new Array(n), | ||
b = new Array(n), | ||
r = new Array(n); | ||
a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; | ||
for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; | ||
a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; | ||
for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; | ||
a[n - 1] = r[n - 1] / b[n - 1]; | ||
for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; | ||
b[n - 1] = (x[n] + a[n - 1]) / 2; | ||
for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; | ||
return [a, b]; | ||
} | ||
function Step(context, t) { | ||
this._context = context; | ||
this._t = t; | ||
} | ||
function natural(context) { | ||
return new Natural(context); | ||
} | ||
Step.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x = this._y = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; // proceed | ||
default: { | ||
if (this._t <= 0) { | ||
this._context.lineTo(this._x, y); | ||
this._context.lineTo(x, y); | ||
} else { | ||
var x1 = this._x * (1 - this._t) + x * this._t; | ||
this._context.lineTo(x1, this._y); | ||
this._context.lineTo(x1, y); | ||
} | ||
break; | ||
function Step(context, t) { | ||
this._context = context; | ||
this._t = t; | ||
} | ||
Step.prototype = { | ||
areaStart: function() { | ||
this._line = 0; | ||
}, | ||
areaEnd: function() { | ||
this._line = NaN; | ||
}, | ||
lineStart: function() { | ||
this._x = this._y = NaN; | ||
this._point = 0; | ||
}, | ||
lineEnd: function() { | ||
if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); | ||
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); | ||
if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; | ||
}, | ||
point: function(x, y) { | ||
x = +x, y = +y; | ||
switch (this._point) { | ||
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; | ||
case 1: this._point = 2; // proceed | ||
default: { | ||
if (this._t <= 0) { | ||
this._context.lineTo(this._x, y); | ||
this._context.lineTo(x, y); | ||
} else { | ||
var x1 = this._x * (1 - this._t) + x * this._t; | ||
this._context.lineTo(x1, this._y); | ||
this._context.lineTo(x1, y); | ||
} | ||
break; | ||
} | ||
this._x = x, this._y = y; | ||
} | ||
}; | ||
function step(context) { | ||
return new Step(context, 0.5); | ||
this._x = x, this._y = y; | ||
} | ||
}; | ||
function stepBefore(context) { | ||
return new Step(context, 0); | ||
} | ||
function step(context) { | ||
return new Step(context, 0.5); | ||
} | ||
function stepAfter(context) { | ||
return new Step(context, 1); | ||
} | ||
function stepBefore(context) { | ||
return new Step(context, 0); | ||
} | ||
var slice = Array.prototype.slice; | ||
function stepAfter(context) { | ||
return new Step(context, 1); | ||
} | ||
function none(series, order) { | ||
if (!((n = series.length) > 1)) return; | ||
for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { | ||
s0 = s1, s1 = series[order[i]]; | ||
for (var j = 0; j < m; ++j) { | ||
s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; | ||
} | ||
var slice = Array.prototype.slice; | ||
function none(series, order) { | ||
if (!((n = series.length) > 1)) return; | ||
for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { | ||
s0 = s1, s1 = series[order[i]]; | ||
for (var j = 0; j < m; ++j) { | ||
s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; | ||
} | ||
} | ||
} | ||
function none$1(series) { | ||
var n = series.length, o = new Array(n); | ||
while (--n >= 0) o[n] = n; | ||
return o; | ||
} | ||
function none$1(series) { | ||
var n = series.length, o = new Array(n); | ||
while (--n >= 0) o[n] = n; | ||
return o; | ||
} | ||
function stackValue(d, key) { | ||
return d[key]; | ||
} | ||
function stackValue(d, key) { | ||
return d[key]; | ||
} | ||
function stack() { | ||
var keys = constant([]), | ||
order = none$1, | ||
offset = none, | ||
value = stackValue; | ||
function stack() { | ||
var keys = constant([]), | ||
order = none$1, | ||
offset = none, | ||
value = stackValue; | ||
function stack(data) { | ||
var kz = keys.apply(this, arguments), | ||
i, | ||
m = data.length, | ||
n = kz.length, | ||
sz = new Array(n), | ||
oz; | ||
function stack(data) { | ||
var kz = keys.apply(this, arguments), | ||
i, | ||
m = data.length, | ||
n = kz.length, | ||
sz = new Array(n), | ||
oz; | ||
for (i = 0; i < n; ++i) { | ||
for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { | ||
si[j] = sij = [0, +value(data[j], ki, j, data)]; | ||
sij.data = data[j]; | ||
} | ||
si.key = ki; | ||
for (i = 0; i < n; ++i) { | ||
for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { | ||
si[j] = sij = [0, +value(data[j], ki, j, data)]; | ||
sij.data = data[j]; | ||
} | ||
si.key = ki; | ||
} | ||
for (i = 0, oz = order(sz); i < n; ++i) { | ||
sz[oz[i]].index = i; | ||
} | ||
offset(sz, oz); | ||
return sz; | ||
for (i = 0, oz = order(sz); i < n; ++i) { | ||
sz[oz[i]].index = i; | ||
} | ||
stack.keys = function(_) { | ||
return arguments.length ? (keys = typeof _ === "function" ? _ : constant(slice.call(_)), stack) : keys; | ||
}; | ||
offset(sz, oz); | ||
return sz; | ||
} | ||
stack.value = function(_) { | ||
return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value; | ||
}; | ||
stack.keys = function(_) { | ||
return arguments.length ? (keys = typeof _ === "function" ? _ : constant(slice.call(_)), stack) : keys; | ||
}; | ||
stack.order = function(_) { | ||
return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant(slice.call(_)), stack) : order; | ||
}; | ||
stack.value = function(_) { | ||
return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value; | ||
}; | ||
stack.offset = function(_) { | ||
return arguments.length ? (offset = _ == null ? none : _, stack) : offset; | ||
}; | ||
stack.order = function(_) { | ||
return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant(slice.call(_)), stack) : order; | ||
}; | ||
return stack; | ||
} | ||
stack.offset = function(_) { | ||
return arguments.length ? (offset = _ == null ? none : _, stack) : offset; | ||
}; | ||
function expand(series, order) { | ||
if (!((n = series.length) > 0)) return; | ||
for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { | ||
for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; | ||
if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; | ||
} | ||
none(series, order); | ||
return stack; | ||
} | ||
function expand(series, order) { | ||
if (!((n = series.length) > 0)) return; | ||
for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { | ||
for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; | ||
if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; | ||
} | ||
none(series, order); | ||
} | ||
function silhouette(series, order) { | ||
if (!((n = series.length) > 0)) return; | ||
for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { | ||
for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; | ||
s0[j][1] += s0[j][0] = -y / 2; | ||
} | ||
none(series, order); | ||
function silhouette(series, order) { | ||
if (!((n = series.length) > 0)) return; | ||
for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { | ||
for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; | ||
s0[j][1] += s0[j][0] = -y / 2; | ||
} | ||
none(series, order); | ||
} | ||
function wiggle(series, order) { | ||
if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; | ||
for (var y = 0, j = 1, s0, m, n; j < m; ++j) { | ||
for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { | ||
var si = series[order[i]], | ||
sij0 = si[j][1] || 0, | ||
sij1 = si[j - 1][1] || 0, | ||
s3 = (sij0 - sij1) / 2; | ||
for (var k = 0; k < i; ++k) { | ||
var sk = series[order[k]], | ||
skj0 = sk[j][1] || 0, | ||
skj1 = sk[j - 1][1] || 0; | ||
s3 += skj0 - skj1; | ||
} | ||
s1 += sij0, s2 += s3 * sij0; | ||
function wiggle(series, order) { | ||
if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; | ||
for (var y = 0, j = 1, s0, m, n; j < m; ++j) { | ||
for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { | ||
var si = series[order[i]], | ||
sij0 = si[j][1] || 0, | ||
sij1 = si[j - 1][1] || 0, | ||
s3 = (sij0 - sij1) / 2; | ||
for (var k = 0; k < i; ++k) { | ||
var sk = series[order[k]], | ||
skj0 = sk[j][1] || 0, | ||
skj1 = sk[j - 1][1] || 0; | ||
s3 += skj0 - skj1; | ||
} | ||
s0[j - 1][1] += s0[j - 1][0] = y; | ||
if (s1) y -= s2 / s1; | ||
s1 += sij0, s2 += s3 * sij0; | ||
} | ||
s0[j - 1][1] += s0[j - 1][0] = y; | ||
none(series, order); | ||
if (s1) y -= s2 / s1; | ||
} | ||
s0[j - 1][1] += s0[j - 1][0] = y; | ||
none(series, order); | ||
} | ||
function ascending(series) { | ||
var sums = series.map(sum); | ||
return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; }); | ||
} | ||
function ascending(series) { | ||
var sums = series.map(sum); | ||
return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; }); | ||
} | ||
function sum(series) { | ||
var s = 0, i = -1, n = series.length, v; | ||
while (++i < n) if (v = +series[i][1]) s += v; | ||
return s; | ||
} | ||
function sum(series) { | ||
var s = 0, i = -1, n = series.length, v; | ||
while (++i < n) if (v = +series[i][1]) s += v; | ||
return s; | ||
} | ||
function descending$1(series) { | ||
return ascending(series).reverse(); | ||
} | ||
function descending$1(series) { | ||
return ascending(series).reverse(); | ||
} | ||
function insideOut(series) { | ||
var n = series.length, | ||
i, | ||
j, | ||
sums = series.map(sum), | ||
order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }), | ||
top = 0, | ||
bottom = 0, | ||
tops = [], | ||
bottoms = []; | ||
function insideOut(series) { | ||
var n = series.length, | ||
i, | ||
j, | ||
sums = series.map(sum), | ||
order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }), | ||
top = 0, | ||
bottom = 0, | ||
tops = [], | ||
bottoms = []; | ||
for (i = 0; i < n; ++i) { | ||
j = order[i]; | ||
if (top < bottom) { | ||
top += sums[j]; | ||
tops.push(j); | ||
} else { | ||
bottom += sums[j]; | ||
bottoms.push(j); | ||
} | ||
for (i = 0; i < n; ++i) { | ||
j = order[i]; | ||
if (top < bottom) { | ||
top += sums[j]; | ||
tops.push(j); | ||
} else { | ||
bottom += sums[j]; | ||
bottoms.push(j); | ||
} | ||
return bottoms.reverse().concat(tops); | ||
} | ||
function reverse(series) { | ||
return none$1(series).reverse(); | ||
} | ||
return bottoms.reverse().concat(tops); | ||
} | ||
exports.arc = arc; | ||
exports.area = area; | ||
exports.line = line; | ||
exports.pie = pie; | ||
exports.radialArea = radialArea; | ||
exports.radialLine = radialLine$1; | ||
exports.symbol = symbol; | ||
exports.symbols = symbols; | ||
exports.symbolCircle = circle; | ||
exports.symbolCross = cross; | ||
exports.symbolDiamond = diamond; | ||
exports.symbolSquare = square; | ||
exports.symbolStar = star; | ||
exports.symbolTriangle = triangle; | ||
exports.symbolWye = wye; | ||
exports.curveBasisClosed = basisClosed; | ||
exports.curveBasisOpen = basisOpen; | ||
exports.curveBasis = basis; | ||
exports.curveBundle = bundle; | ||
exports.curveCardinalClosed = cardinalClosed; | ||
exports.curveCardinalOpen = cardinalOpen; | ||
exports.curveCardinal = cardinal; | ||
exports.curveCatmullRomClosed = catmullRomClosed; | ||
exports.curveCatmullRomOpen = catmullRomOpen; | ||
exports.curveCatmullRom = catmullRom; | ||
exports.curveLinearClosed = linearClosed; | ||
exports.curveLinear = curveLinear; | ||
exports.curveMonotoneX = monotoneX; | ||
exports.curveMonotoneY = monotoneY; | ||
exports.curveNatural = natural; | ||
exports.curveStep = step; | ||
exports.curveStepAfter = stepAfter; | ||
exports.curveStepBefore = stepBefore; | ||
exports.stack = stack; | ||
exports.stackOffsetExpand = expand; | ||
exports.stackOffsetNone = none; | ||
exports.stackOffsetSilhouette = silhouette; | ||
exports.stackOffsetWiggle = wiggle; | ||
exports.stackOrderAscending = ascending; | ||
exports.stackOrderDescending = descending$1; | ||
exports.stackOrderInsideOut = insideOut; | ||
exports.stackOrderNone = none$1; | ||
exports.stackOrderReverse = reverse; | ||
function reverse(series) { | ||
return none$1(series).reverse(); | ||
} | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
exports.arc = arc; | ||
exports.area = area; | ||
exports.line = line; | ||
exports.pie = pie; | ||
exports.radialArea = radialArea; | ||
exports.radialLine = radialLine$1; | ||
exports.symbol = symbol; | ||
exports.symbols = symbols; | ||
exports.symbolCircle = circle; | ||
exports.symbolCross = cross; | ||
exports.symbolDiamond = diamond; | ||
exports.symbolSquare = square; | ||
exports.symbolStar = star; | ||
exports.symbolTriangle = triangle; | ||
exports.symbolWye = wye; | ||
exports.curveBasisClosed = basisClosed; | ||
exports.curveBasisOpen = basisOpen; | ||
exports.curveBasis = basis; | ||
exports.curveBundle = bundle; | ||
exports.curveCardinalClosed = cardinalClosed; | ||
exports.curveCardinalOpen = cardinalOpen; | ||
exports.curveCardinal = cardinal; | ||
exports.curveCatmullRomClosed = catmullRomClosed; | ||
exports.curveCatmullRomOpen = catmullRomOpen; | ||
exports.curveCatmullRom = catmullRom; | ||
exports.curveLinearClosed = linearClosed; | ||
exports.curveLinear = curveLinear; | ||
exports.curveMonotoneX = monotoneX; | ||
exports.curveMonotoneY = monotoneY; | ||
exports.curveNatural = natural; | ||
exports.curveStep = step; | ||
exports.curveStepAfter = stepAfter; | ||
exports.curveStepBefore = stepBefore; | ||
exports.stack = stack; | ||
exports.stackOffsetExpand = expand; | ||
exports.stackOffsetNone = none; | ||
exports.stackOffsetSilhouette = silhouette; | ||
exports.stackOffsetWiggle = wiggle; | ||
exports.stackOrderAscending = ascending; | ||
exports.stackOrderDescending = descending$1; | ||
exports.stackOrderInsideOut = insideOut; | ||
exports.stackOrderNone = none$1; | ||
exports.stackOrderReverse = reverse; | ||
})); | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}))); |
@@ -1,2 +0,2 @@ | ||
// https://d3js.org/d3-shape/ Version 1.0.2. Copyright 2016 Mike Bostock. | ||
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("d3-path")):"function"==typeof define&&define.amd?define(["exports","d3-path"],i):i(t.d3=t.d3||{},t.d3)}(this,function(t,i){"use strict";function n(t){return function(){return t}}function e(t){return t.innerRadius}function s(t){return t.outerRadius}function h(t){return t.startAngle}function o(t){return t.endAngle}function _(t){return t&&t.padAngle}function a(t){return t>=1?bt:t<=-1?-bt:Math.asin(t)}function r(t,i,n,e,s,h,o,_){var a=n-t,r=e-i,c=o-s,l=_-h,u=(c*(i-h)-l*(t-s))/(l*a-c*r);return[t+u*a,i+u*r]}function c(t,i,n,e,s,h,o){var _=t-n,a=i-e,r=(o?h:-h)/Math.sqrt(_*_+a*a),c=r*a,l=-r*_,u=t+c,f=i+l,x=n+c,y=e+l,p=(u+x)/2,v=(f+y)/2,d=x-u,T=y-f,M=d*d+T*T,g=s-h,b=u*y-x*f,w=(T<0?-1:1)*Math.sqrt(Math.max(0,g*g*M-b*b)),m=(b*T-d*w)/M,k=(-b*d-T*w)/M,N=(b*T+d*w)/M,S=(-b*d+T*w)/M,E=m-p,A=k-v,P=N-p,q=S-v;return E*E+A*A>P*P+q*q&&(m=N,k=S),{cx:m,cy:k,x01:-c,y01:-l,x11:m*(s/g-1),y11:k*(s/g-1)}}function l(){function t(){var t,n,e=+l.apply(this,arguments),s=+u.apply(this,arguments),h=y.apply(this,arguments)-bt,o=p.apply(this,arguments)-bt,_=Math.abs(o-h),T=o>h;if(d||(d=t=i.path()),s<e&&(n=s,s=e,e=n),s>Mt)if(_>wt-Mt)d.moveTo(s*Math.cos(h),s*Math.sin(h)),d.arc(0,0,s,h,o,!T),e>Mt&&(d.moveTo(e*Math.cos(o),e*Math.sin(o)),d.arc(0,0,e,o,h,T));else{var M,g,b=h,w=o,m=h,k=o,N=_,S=_,E=v.apply(this,arguments)/2,A=E>Mt&&(x?+x.apply(this,arguments):Math.sqrt(e*e+s*s)),P=Math.min(Math.abs(s-e)/2,+f.apply(this,arguments)),q=P,C=P;if(A>Mt){var O=a(A/e*Math.sin(E)),R=a(A/s*Math.sin(E));(N-=2*O)>Mt?(O*=T?1:-1,m+=O,k-=O):(N=0,m=k=(h+o)/2),(S-=2*R)>Mt?(R*=T?1:-1,b+=R,w-=R):(S=0,b=w=(h+o)/2)}var z=s*Math.cos(b),X=s*Math.sin(b),Y=e*Math.cos(k),B=e*Math.sin(k);if(P>Mt){var j=s*Math.cos(w),I=s*Math.sin(w),L=e*Math.cos(m),D=e*Math.sin(m);if(_<gt){var W=N>Mt?r(z,X,L,D,j,I,Y,B):[Y,B],V=z-W[0],F=X-W[1],G=j-W[0],H=I-W[1],J=1/Math.sin(Math.acos((V*G+F*H)/(Math.sqrt(V*V+F*F)*Math.sqrt(G*G+H*H)))/2),K=Math.sqrt(W[0]*W[0]+W[1]*W[1]);q=Math.min(P,(e-K)/(J-1)),C=Math.min(P,(s-K)/(J+1))}}S>Mt?C>Mt?(M=c(L,D,z,X,s,C,T),g=c(j,I,Y,B,s,C,T),d.moveTo(M.cx+M.x01,M.cy+M.y01),C<P?d.arc(M.cx,M.cy,C,Math.atan2(M.y01,M.x01),Math.atan2(g.y01,g.x01),!T):(d.arc(M.cx,M.cy,C,Math.atan2(M.y01,M.x01),Math.atan2(M.y11,M.x11),!T),d.arc(0,0,s,Math.atan2(M.cy+M.y11,M.cx+M.x11),Math.atan2(g.cy+g.y11,g.cx+g.x11),!T),d.arc(g.cx,g.cy,C,Math.atan2(g.y11,g.x11),Math.atan2(g.y01,g.x01),!T))):(d.moveTo(z,X),d.arc(0,0,s,b,w,!T)):d.moveTo(z,X),e>Mt&&N>Mt?q>Mt?(M=c(Y,B,j,I,e,-q,T),g=c(z,X,L,D,e,-q,T),d.lineTo(M.cx+M.x01,M.cy+M.y01),q<P?d.arc(M.cx,M.cy,q,Math.atan2(M.y01,M.x01),Math.atan2(g.y01,g.x01),!T):(d.arc(M.cx,M.cy,q,Math.atan2(M.y01,M.x01),Math.atan2(M.y11,M.x11),!T),d.arc(0,0,e,Math.atan2(M.cy+M.y11,M.cx+M.x11),Math.atan2(g.cy+g.y11,g.cx+g.x11),T),d.arc(g.cx,g.cy,q,Math.atan2(g.y11,g.x11),Math.atan2(g.y01,g.x01),!T))):d.arc(0,0,e,k,m,T):d.lineTo(Y,B)}else d.moveTo(0,0);if(d.closePath(),t)return d=null,t+""||null}var l=e,u=s,f=n(0),x=null,y=h,p=o,v=_,d=null;return t.centroid=function(){var t=(+l.apply(this,arguments)+ +u.apply(this,arguments))/2,i=(+y.apply(this,arguments)+ +p.apply(this,arguments))/2-gt/2;return[Math.cos(i)*t,Math.sin(i)*t]},t.innerRadius=function(i){return arguments.length?(l="function"==typeof i?i:n(+i),t):l},t.outerRadius=function(i){return arguments.length?(u="function"==typeof i?i:n(+i),t):u},t.cornerRadius=function(i){return arguments.length?(f="function"==typeof i?i:n(+i),t):f},t.padRadius=function(i){return arguments.length?(x=null==i?null:"function"==typeof i?i:n(+i),t):x},t.startAngle=function(i){return arguments.length?(y="function"==typeof i?i:n(+i),t):y},t.endAngle=function(i){return arguments.length?(p="function"==typeof i?i:n(+i),t):p},t.padAngle=function(i){return arguments.length?(v="function"==typeof i?i:n(+i),t):v},t.context=function(i){return arguments.length?(d=null==i?null:i,t):d},t}function u(t){this._context=t}function f(t){return new u(t)}function x(t){return t[0]}function y(t){return t[1]}function p(){function t(t){var n,r,c,l=t.length,u=!1;for(null==o&&(a=_(c=i.path())),n=0;n<=l;++n)!(n<l&&h(r=t[n],n,t))===u&&((u=!u)?a.lineStart():a.lineEnd()),u&&a.point(+e(r,n,t),+s(r,n,t));if(c)return a=null,c+""||null}var e=x,s=y,h=n(!0),o=null,_=f,a=null;return t.x=function(i){return arguments.length?(e="function"==typeof i?i:n(+i),t):e},t.y=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.defined=function(i){return arguments.length?(h="function"==typeof i?i:n(!!i),t):h},t.curve=function(i){return arguments.length?(_=i,null!=o&&(a=_(o)),t):_},t.context=function(i){return arguments.length?(null==i?o=a=null:a=_(o=i),t):o},t}function v(){function t(t){var n,e,u,f,x,y=t.length,p=!1,v=new Array(y),d=new Array(y);for(null==r&&(l=c(x=i.path())),n=0;n<=y;++n){if(!(n<y&&a(f=t[n],n,t))===p)if(p=!p)e=n,l.areaStart(),l.lineStart();else{for(l.lineEnd(),l.lineStart(),u=n-1;u>=e;--u)l.point(v[u],d[u]);l.lineEnd(),l.areaEnd()}p&&(v[n]=+s(f,n,t),d[n]=+o(f,n,t),l.point(h?+h(f,n,t):v[n],_?+_(f,n,t):d[n]))}if(x)return l=null,x+""||null}function e(){return p().defined(a).curve(c).context(r)}var s=x,h=null,o=n(0),_=y,a=n(!0),r=null,c=f,l=null;return t.x=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),h=null,t):s},t.x0=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.x1=function(i){return arguments.length?(h=null==i?null:"function"==typeof i?i:n(+i),t):h},t.y=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),_=null,t):o},t.y0=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),t):o},t.y1=function(i){return arguments.length?(_=null==i?null:"function"==typeof i?i:n(+i),t):_},t.lineX0=t.lineY0=function(){return e().x(s).y(o)},t.lineY1=function(){return e().x(s).y(_)},t.lineX1=function(){return e().x(h).y(o)},t.defined=function(i){return arguments.length?(a="function"==typeof i?i:n(!!i),t):a},t.curve=function(i){return arguments.length?(c=i,null!=r&&(l=c(r)),t):c},t.context=function(i){return arguments.length?(null==i?r=l=null:l=c(r=i),t):r},t}function d(t,i){return i<t?-1:i>t?1:i>=t?0:NaN}function T(t){return t}function M(){function t(t){var n,a,r,c,l,u=t.length,f=0,x=new Array(u),y=new Array(u),p=+h.apply(this,arguments),v=Math.min(wt,Math.max(-wt,o.apply(this,arguments)-p)),d=Math.min(Math.abs(v)/u,_.apply(this,arguments)),T=d*(v<0?-1:1);for(n=0;n<u;++n)(l=y[x[n]=n]=+i(t[n],n,t))>0&&(f+=l);for(null!=e?x.sort(function(t,i){return e(y[t],y[i])}):null!=s&&x.sort(function(i,n){return s(t[i],t[n])}),n=0,r=f?(v-u*T)/f:0;n<u;++n,p=c)a=x[n],l=y[a],c=p+(l>0?l*r:0)+T,y[a]={data:t[a],index:n,value:l,startAngle:p,endAngle:c,padAngle:d};return y}var i=T,e=d,s=null,h=n(0),o=n(wt),_=n(0);return t.value=function(e){return arguments.length?(i="function"==typeof e?e:n(+e),t):i},t.sortValues=function(i){return arguments.length?(e=i,s=null,t):e},t.sort=function(i){return arguments.length?(s=i,e=null,t):s},t.startAngle=function(i){return arguments.length?(h="function"==typeof i?i:n(+i),t):h},t.endAngle=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),t):o},t.padAngle=function(i){return arguments.length?(_="function"==typeof i?i:n(+i),t):_},t}function g(t){this._curve=t}function b(t){function i(i){return new g(t(i))}return i._curve=t,i}function w(t){var i=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?i(b(t)):i()._curve},t}function m(){return w(p().curve(mt))}function k(){var t=v().curve(mt),i=t.curve,n=t.lineX0,e=t.lineX1,s=t.lineY0,h=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return w(n())},delete t.lineX0,t.lineEndAngle=function(){return w(e())},delete t.lineX1,t.lineInnerRadius=function(){return w(s())},delete t.lineY0,t.lineOuterRadius=function(){return w(h())},delete t.lineY1,t.curve=function(t){return arguments.length?i(b(t)):i()._curve},t}function N(){function t(){var t;if(h||(h=t=i.path()),e.apply(this,arguments).draw(h,+s.apply(this,arguments)),t)return h=null,t+""||null}var e=n(kt),s=n(64),h=null;return t.type=function(i){return arguments.length?(e="function"==typeof i?i:n(i),t):e},t.size=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.context=function(i){return arguments.length?(h=null==i?null:i,t):h},t}function S(){}function E(t,i,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+i)/6,(t._y0+4*t._y1+n)/6)}function A(t){this._context=t}function P(t){return new A(t)}function q(t){this._context=t}function C(t){return new q(t)}function O(t){this._context=t}function R(t){return new O(t)}function z(t,i){this._basis=new A(t),this._beta=i}function X(t,i,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-i),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Y(t,i){this._context=t,this._k=(1-i)/6}function B(t,i){this._context=t,this._k=(1-i)/6}function j(t,i){this._context=t,this._k=(1-i)/6}function I(t,i,n){var e=t._x1,s=t._y1,h=t._x2,o=t._y2;if(t._l01_a>Mt){var _=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,a=3*t._l01_a*(t._l01_a+t._l12_a);e=(e*_-t._x0*t._l12_2a+t._x2*t._l01_2a)/a,s=(s*_-t._y0*t._l12_2a+t._y2*t._l01_2a)/a}if(t._l23_a>Mt){var r=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);h=(h*r+t._x1*t._l23_2a-i*t._l12_2a)/c,o=(o*r+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(e,s,h,o,t._x2,t._y2)}function L(t,i){this._context=t,this._alpha=i}function D(t,i){this._context=t,this._alpha=i}function W(t,i){this._context=t,this._alpha=i}function V(t){this._context=t}function F(t){return new V(t)}function G(t){return t<0?-1:1}function H(t,i,n){var e=t._x1-t._x0,s=i-t._x1,h=(t._y1-t._y0)/(e||s<0&&-0),o=(n-t._y1)/(s||e<0&&-0),_=(h*s+o*e)/(e+s);return(G(h)+G(o))*Math.min(Math.abs(h),Math.abs(o),.5*Math.abs(_))||0}function J(t,i){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-i)/2:i}function K(t,i,n){var e=t._x0,s=t._y0,h=t._x1,o=t._y1,_=(h-e)/3;t._context.bezierCurveTo(e+_,s+_*i,h-_,o-_*n,h,o)}function Q(t){this._context=t}function U(t){this._context=new Z(t)}function Z(t){this._context=t}function $(t){return new Q(t)}function tt(t){return new U(t)}function it(t){this._context=t}function nt(t){var i,n,e=t.length-1,s=new Array(e),h=new Array(e),o=new Array(e);for(s[0]=0,h[0]=2,o[0]=t[0]+2*t[1],i=1;i<e-1;++i)s[i]=1,h[i]=4,o[i]=4*t[i]+2*t[i+1];for(s[e-1]=2,h[e-1]=7,o[e-1]=8*t[e-1]+t[e],i=1;i<e;++i)n=s[i]/h[i-1],h[i]-=n,o[i]-=n*o[i-1];for(s[e-1]=o[e-1]/h[e-1],i=e-2;i>=0;--i)s[i]=(o[i]-s[i+1])/h[i];for(h[e-1]=(t[e]+s[e-1])/2,i=0;i<e-1;++i)h[i]=2*t[i+1]-s[i+1];return[s,h]}function et(t){return new it(t)}function st(t,i){this._context=t,this._t=i}function ht(t){return new st(t,.5)}function ot(t){return new st(t,0)}function _t(t){return new st(t,1)}function at(t,i){if((e=t.length)>1)for(var n,e,s=1,h=t[i[0]],o=h.length;s<e;++s){n=h,h=t[i[s]];for(var _=0;_<o;++_)h[_][1]+=h[_][0]=isNaN(n[_][1])?n[_][0]:n[_][1]}}function rt(t){for(var i=t.length,n=new Array(i);--i>=0;)n[i]=i;return n}function ct(t,i){return t[i]}function lt(){function t(t){var n,o,_=i.apply(this,arguments),a=t.length,r=_.length,c=new Array(r);for(n=0;n<r;++n){for(var l,u=_[n],f=c[n]=new Array(a),x=0;x<a;++x)f[x]=l=[0,+h(t[x],u,x,t)],l.data=t[x];f.key=u}for(n=0,o=e(c);n<r;++n)c[o[n]].index=n;return s(c,o),c}var i=n([]),e=rt,s=at,h=ct;return t.keys=function(e){return arguments.length?(i="function"==typeof e?e:n(Ut.call(e)),t):i},t.value=function(i){return arguments.length?(h="function"==typeof i?i:n(+i),t):h},t.order=function(i){return arguments.length?(e=null==i?rt:"function"==typeof i?i:n(Ut.call(i)),t):e},t.offset=function(i){return arguments.length?(s=null==i?at:i,t):s},t}function ut(t,i){if((e=t.length)>0){for(var n,e,s,h=0,o=t[0].length;h<o;++h){for(s=n=0;n<e;++n)s+=t[n][h][1]||0;if(s)for(n=0;n<e;++n)t[n][h][1]/=s}at(t,i)}}function ft(t,i){if((n=t.length)>0){for(var n,e=0,s=t[i[0]],h=s.length;e<h;++e){for(var o=0,_=0;o<n;++o)_+=t[o][e][1]||0;s[e][1]+=s[e][0]=-_/2}at(t,i)}}function xt(t,i){if((s=t.length)>0&&(e=(n=t[i[0]]).length)>0){for(var n,e,s,h=0,o=1;o<e;++o){for(var _=0,a=0,r=0;_<s;++_){for(var c=t[i[_]],l=c[o][1]||0,u=c[o-1][1]||0,f=(l-u)/2,x=0;x<_;++x){var y=t[i[x]],p=y[o][1]||0,v=y[o-1][1]||0;f+=p-v}a+=l,r+=f*l}n[o-1][1]+=n[o-1][0]=h,a&&(h-=r/a)}n[o-1][1]+=n[o-1][0]=h,at(t,i)}}function yt(t){var i=t.map(pt);return rt(t).sort(function(t,n){return i[t]-i[n]})}function pt(t){for(var i,n=0,e=-1,s=t.length;++e<s;)(i=+t[e][1])&&(n+=i);return n}function vt(t){return yt(t).reverse()}function dt(t){var i,n,e=t.length,s=t.map(pt),h=rt(t).sort(function(t,i){return s[i]-s[t]}),o=0,_=0,a=[],r=[];for(i=0;i<e;++i)n=h[i],o<_?(o+=s[n],a.push(n)):(_+=s[n],r.push(n));return r.reverse().concat(a)}function Tt(t){return rt(t).reverse()}var Mt=1e-12,gt=Math.PI,bt=gt/2,wt=2*gt;u.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;default:this._context.lineTo(t,i)}}};var mt=b(f);g.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,i){this._curve.point(i*Math.sin(t),i*-Math.cos(t))}};var kt={draw:function(t,i){var n=Math.sqrt(i/gt);t.moveTo(n,0),t.arc(0,0,n,0,wt)}},Nt={draw:function(t,i){var n=Math.sqrt(i/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},St=Math.sqrt(1/3),Et=2*St,At={draw:function(t,i){var n=Math.sqrt(i/Et),e=n*St;t.moveTo(0,-n),t.lineTo(e,0),t.lineTo(0,n),t.lineTo(-e,0),t.closePath()}},Pt=.8908130915292852,qt=Math.sin(gt/10)/Math.sin(7*gt/10),Ct=Math.sin(wt/10)*qt,Ot=-Math.cos(wt/10)*qt,Rt={draw:function(t,i){var n=Math.sqrt(i*Pt),e=Ct*n,s=Ot*n;t.moveTo(0,-n),t.lineTo(e,s);for(var h=1;h<5;++h){var o=wt*h/5,_=Math.cos(o),a=Math.sin(o);t.lineTo(a*n,-_*n),t.lineTo(_*e-a*s,a*e+_*s)}t.closePath()}},zt={draw:function(t,i){var n=Math.sqrt(i),e=-n/2;t.rect(e,e,n,n)}},Xt=Math.sqrt(3),Yt={draw:function(t,i){var n=-Math.sqrt(i/(3*Xt));t.moveTo(0,2*n),t.lineTo(-Xt*n,-n),t.lineTo(Xt*n,-n),t.closePath()}},Bt=-.5,jt=Math.sqrt(3)/2,It=1/Math.sqrt(12),Lt=3*(It/2+1),Dt={draw:function(t,i){var n=Math.sqrt(i/Lt),e=n/2,s=n*It,h=e,o=n*It+n,_=-h,a=o;t.moveTo(e,s),t.lineTo(h,o),t.lineTo(_,a),t.lineTo(Bt*e-jt*s,jt*e+Bt*s),t.lineTo(Bt*h-jt*o,jt*h+Bt*o),t.lineTo(Bt*_-jt*a,jt*_+Bt*a),t.lineTo(Bt*e+jt*s,Bt*s-jt*e),t.lineTo(Bt*h+jt*o,Bt*o-jt*h),t.lineTo(Bt*_+jt*a,Bt*a-jt*_),t.closePath()}},Wt=[kt,Nt,At,zt,Rt,Yt,Dt];A.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:E(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},q.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._x2=t,this._y2=i;break;case 1:this._point=2,this._x3=t,this._y3=i;break;case 2:this._point=3,this._x4=t,this._y4=i,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+i)/6);break;default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},O.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,e=(this._y0+4*this._y1+i)/6;this._line?this._context.lineTo(n,e):this._context.moveTo(n,e);break;case 3:this._point=4;default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},z.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,i=this._y,n=t.length-1;if(n>0)for(var e,s=t[0],h=i[0],o=t[n]-s,_=i[n]-h,a=-1;++a<=n;)e=a/n,this._basis.point(this._beta*t[a]+(1-this._beta)*(s+e*o),this._beta*i[a]+(1-this._beta)*(h+e*_));this._x=this._y=null,this._basis.lineEnd()},point:function(t,i){this._x.push(+t),this._y.push(+i)}};var Vt=function t(i){function n(t){return 1===i?new A(t):new z(t,i)}return n.beta=function(i){return t(+i)},n}(.85);Y.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:X(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2,this._x1=t,this._y1=i;break;case 2:this._point=3;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Ft=function t(i){function n(t){return new Y(t,i)}return n.tension=function(i){return t(+i)},n}(0);B.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._x3=t,this._y3=i;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=i);break;case 2:this._point=3,this._x5=t,this._y5=i;break;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Gt=function t(i){function n(t){return new B(t,i)}return n.tension=function(i){return t(+i)},n}(0);j.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Ht=function t(i){function n(t){return new j(t,i)}return n.tension=function(i){return t(+i)},n}(0);L.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this,this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Jt=function t(i){function n(t){return i?new L(t,i):new Y(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);D.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=i;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=i);break;case 2:this._point=3,this._x5=t,this._y5=i;break;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Kt=function t(i){function n(t){return i?new D(t,i):new B(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);W.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Qt=function t(i){function n(t){return i?new W(t,i):new j(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);V.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,i){t=+t,i=+i,this._point?this._context.lineTo(t,i):(this._point=1,this._context.moveTo(t,i))}},Q.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:K(this,this._t0,J(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){var n=NaN;if(t=+t,i=+i,t!==this._x1||i!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3,K(this,J(this,n=H(this,t,i)),n);break;default:K(this,this._t0,n=H(this,t,i))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i,this._t0=n}}},(U.prototype=Object.create(Q.prototype)).point=function(t,i){Q.prototype.point.call(this,i,t)},Z.prototype={moveTo:function(t,i){this._context.moveTo(i,t)},closePath:function(){this._context.closePath()},lineTo:function(t,i){this._context.lineTo(i,t)},bezierCurveTo:function(t,i,n,e,s,h){this._context.bezierCurveTo(i,t,e,n,h,s)}},it.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,i=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],i[0]):this._context.moveTo(t[0],i[0]),2===n)this._context.lineTo(t[1],i[1]);else for(var e=nt(t),s=nt(i),h=0,o=1;o<n;++h,++o)this._context.bezierCurveTo(e[0][h],s[0][h],e[1][h],s[1][h],t[o],i[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,i){this._x.push(+t),this._y.push(+i)}},st.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,i),this._context.lineTo(t,i);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,i)}}this._x=t,this._y=i}};var Ut=Array.prototype.slice;t.arc=l,t.area=v,t.line=p,t.pie=M,t.radialArea=k,t.radialLine=m,t.symbol=N,t.symbols=Wt,t.symbolCircle=kt,t.symbolCross=Nt,t.symbolDiamond=At,t.symbolSquare=zt,t.symbolStar=Rt,t.symbolTriangle=Yt,t.symbolWye=Dt,t.curveBasisClosed=C,t.curveBasisOpen=R,t.curveBasis=P,t.curveBundle=Vt,t.curveCardinalClosed=Gt,t.curveCardinalOpen=Ht,t.curveCardinal=Ft,t.curveCatmullRomClosed=Kt,t.curveCatmullRomOpen=Qt,t.curveCatmullRom=Jt,t.curveLinearClosed=F,t.curveLinear=f,t.curveMonotoneX=$,t.curveMonotoneY=tt,t.curveNatural=et,t.curveStep=ht,t.curveStepAfter=_t,t.curveStepBefore=ot,t.stack=lt,t.stackOffsetExpand=ut,t.stackOffsetNone=at,t.stackOffsetSilhouette=ft,t.stackOffsetWiggle=xt,t.stackOrderAscending=yt,t.stackOrderDescending=vt,t.stackOrderInsideOut=dt,t.stackOrderNone=rt,t.stackOrderReverse=Tt,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
// https://d3js.org/d3-shape/ Version 1.0.3. Copyright 2016 Mike Bostock. | ||
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("d3-path")):"function"==typeof define&&define.amd?define(["exports","d3-path"],i):i(t.d3=t.d3||{},t.d3)}(this,function(t,i){"use strict";function n(t){return function(){return t}}function e(t){return t.innerRadius}function s(t){return t.outerRadius}function h(t){return t.startAngle}function o(t){return t.endAngle}function _(t){return t&&t.padAngle}function a(t){return t>=1?bt:t<=-1?-bt:Math.asin(t)}function r(t,i,n,e,s,h,o,_){var a=n-t,r=e-i,c=o-s,l=_-h,u=(c*(i-h)-l*(t-s))/(l*a-c*r);return[t+u*a,i+u*r]}function c(t,i,n,e,s,h,o){var _=t-n,a=i-e,r=(o?h:-h)/Math.sqrt(_*_+a*a),c=r*a,l=-r*_,u=t+c,f=i+l,x=n+c,y=e+l,p=(u+x)/2,v=(f+y)/2,d=x-u,T=y-f,M=d*d+T*T,g=s-h,b=u*y-x*f,w=(T<0?-1:1)*Math.sqrt(Math.max(0,g*g*M-b*b)),m=(b*T-d*w)/M,k=(-b*d-T*w)/M,N=(b*T+d*w)/M,S=(-b*d+T*w)/M,E=m-p,A=k-v,P=N-p,q=S-v;return E*E+A*A>P*P+q*q&&(m=N,k=S),{cx:m,cy:k,x01:-c,y01:-l,x11:m*(s/g-1),y11:k*(s/g-1)}}function l(){function t(){var t,n,e=+l.apply(this,arguments),s=+u.apply(this,arguments),h=y.apply(this,arguments)-bt,o=p.apply(this,arguments)-bt,_=Math.abs(o-h),T=o>h;if(d||(d=t=i.path()),s<e&&(n=s,s=e,e=n),s>Mt)if(_>wt-Mt)d.moveTo(s*Math.cos(h),s*Math.sin(h)),d.arc(0,0,s,h,o,!T),e>Mt&&(d.moveTo(e*Math.cos(o),e*Math.sin(o)),d.arc(0,0,e,o,h,T));else{var M,g,b=h,w=o,m=h,k=o,N=_,S=_,E=v.apply(this,arguments)/2,A=E>Mt&&(x?+x.apply(this,arguments):Math.sqrt(e*e+s*s)),P=Math.min(Math.abs(s-e)/2,+f.apply(this,arguments)),q=P,C=P;if(A>Mt){var O=a(A/e*Math.sin(E)),R=a(A/s*Math.sin(E));(N-=2*O)>Mt?(O*=T?1:-1,m+=O,k-=O):(N=0,m=k=(h+o)/2),(S-=2*R)>Mt?(R*=T?1:-1,b+=R,w-=R):(S=0,b=w=(h+o)/2)}var z=s*Math.cos(b),X=s*Math.sin(b),Y=e*Math.cos(k),B=e*Math.sin(k);if(P>Mt){var j=s*Math.cos(w),I=s*Math.sin(w),L=e*Math.cos(m),D=e*Math.sin(m);if(_<gt){var W=N>Mt?r(z,X,L,D,j,I,Y,B):[Y,B],V=z-W[0],F=X-W[1],G=j-W[0],H=I-W[1],J=1/Math.sin(Math.acos((V*G+F*H)/(Math.sqrt(V*V+F*F)*Math.sqrt(G*G+H*H)))/2),K=Math.sqrt(W[0]*W[0]+W[1]*W[1]);q=Math.min(P,(e-K)/(J-1)),C=Math.min(P,(s-K)/(J+1))}}S>Mt?C>Mt?(M=c(L,D,z,X,s,C,T),g=c(j,I,Y,B,s,C,T),d.moveTo(M.cx+M.x01,M.cy+M.y01),C<P?d.arc(M.cx,M.cy,C,Math.atan2(M.y01,M.x01),Math.atan2(g.y01,g.x01),!T):(d.arc(M.cx,M.cy,C,Math.atan2(M.y01,M.x01),Math.atan2(M.y11,M.x11),!T),d.arc(0,0,s,Math.atan2(M.cy+M.y11,M.cx+M.x11),Math.atan2(g.cy+g.y11,g.cx+g.x11),!T),d.arc(g.cx,g.cy,C,Math.atan2(g.y11,g.x11),Math.atan2(g.y01,g.x01),!T))):(d.moveTo(z,X),d.arc(0,0,s,b,w,!T)):d.moveTo(z,X),e>Mt&&N>Mt?q>Mt?(M=c(Y,B,j,I,e,-q,T),g=c(z,X,L,D,e,-q,T),d.lineTo(M.cx+M.x01,M.cy+M.y01),q<P?d.arc(M.cx,M.cy,q,Math.atan2(M.y01,M.x01),Math.atan2(g.y01,g.x01),!T):(d.arc(M.cx,M.cy,q,Math.atan2(M.y01,M.x01),Math.atan2(M.y11,M.x11),!T),d.arc(0,0,e,Math.atan2(M.cy+M.y11,M.cx+M.x11),Math.atan2(g.cy+g.y11,g.cx+g.x11),T),d.arc(g.cx,g.cy,q,Math.atan2(g.y11,g.x11),Math.atan2(g.y01,g.x01),!T))):d.arc(0,0,e,k,m,T):d.lineTo(Y,B)}else d.moveTo(0,0);if(d.closePath(),t)return d=null,t+""||null}var l=e,u=s,f=n(0),x=null,y=h,p=o,v=_,d=null;return t.centroid=function(){var t=(+l.apply(this,arguments)+ +u.apply(this,arguments))/2,i=(+y.apply(this,arguments)+ +p.apply(this,arguments))/2-gt/2;return[Math.cos(i)*t,Math.sin(i)*t]},t.innerRadius=function(i){return arguments.length?(l="function"==typeof i?i:n(+i),t):l},t.outerRadius=function(i){return arguments.length?(u="function"==typeof i?i:n(+i),t):u},t.cornerRadius=function(i){return arguments.length?(f="function"==typeof i?i:n(+i),t):f},t.padRadius=function(i){return arguments.length?(x=null==i?null:"function"==typeof i?i:n(+i),t):x},t.startAngle=function(i){return arguments.length?(y="function"==typeof i?i:n(+i),t):y},t.endAngle=function(i){return arguments.length?(p="function"==typeof i?i:n(+i),t):p},t.padAngle=function(i){return arguments.length?(v="function"==typeof i?i:n(+i),t):v},t.context=function(i){return arguments.length?(d=null==i?null:i,t):d},t}function u(t){this._context=t}function f(t){return new u(t)}function x(t){return t[0]}function y(t){return t[1]}function p(){function t(t){var n,r,c,l=t.length,u=!1;for(null==o&&(a=_(c=i.path())),n=0;n<=l;++n)!(n<l&&h(r=t[n],n,t))===u&&((u=!u)?a.lineStart():a.lineEnd()),u&&a.point(+e(r,n,t),+s(r,n,t));if(c)return a=null,c+""||null}var e=x,s=y,h=n(!0),o=null,_=f,a=null;return t.x=function(i){return arguments.length?(e="function"==typeof i?i:n(+i),t):e},t.y=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.defined=function(i){return arguments.length?(h="function"==typeof i?i:n(!!i),t):h},t.curve=function(i){return arguments.length?(_=i,null!=o&&(a=_(o)),t):_},t.context=function(i){return arguments.length?(null==i?o=a=null:a=_(o=i),t):o},t}function v(){function t(t){var n,e,u,f,x,y=t.length,p=!1,v=new Array(y),d=new Array(y);for(null==r&&(l=c(x=i.path())),n=0;n<=y;++n){if(!(n<y&&a(f=t[n],n,t))===p)if(p=!p)e=n,l.areaStart(),l.lineStart();else{for(l.lineEnd(),l.lineStart(),u=n-1;u>=e;--u)l.point(v[u],d[u]);l.lineEnd(),l.areaEnd()}p&&(v[n]=+s(f,n,t),d[n]=+o(f,n,t),l.point(h?+h(f,n,t):v[n],_?+_(f,n,t):d[n]))}if(x)return l=null,x+""||null}function e(){return p().defined(a).curve(c).context(r)}var s=x,h=null,o=n(0),_=y,a=n(!0),r=null,c=f,l=null;return t.x=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),h=null,t):s},t.x0=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.x1=function(i){return arguments.length?(h=null==i?null:"function"==typeof i?i:n(+i),t):h},t.y=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),_=null,t):o},t.y0=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),t):o},t.y1=function(i){return arguments.length?(_=null==i?null:"function"==typeof i?i:n(+i),t):_},t.lineX0=t.lineY0=function(){return e().x(s).y(o)},t.lineY1=function(){return e().x(s).y(_)},t.lineX1=function(){return e().x(h).y(o)},t.defined=function(i){return arguments.length?(a="function"==typeof i?i:n(!!i),t):a},t.curve=function(i){return arguments.length?(c=i,null!=r&&(l=c(r)),t):c},t.context=function(i){return arguments.length?(null==i?r=l=null:l=c(r=i),t):r},t}function d(t,i){return i<t?-1:i>t?1:i>=t?0:NaN}function T(t){return t}function M(){function t(t){var n,a,r,c,l,u=t.length,f=0,x=new Array(u),y=new Array(u),p=+h.apply(this,arguments),v=Math.min(wt,Math.max(-wt,o.apply(this,arguments)-p)),d=Math.min(Math.abs(v)/u,_.apply(this,arguments)),T=d*(v<0?-1:1);for(n=0;n<u;++n)(l=y[x[n]=n]=+i(t[n],n,t))>0&&(f+=l);for(null!=e?x.sort(function(t,i){return e(y[t],y[i])}):null!=s&&x.sort(function(i,n){return s(t[i],t[n])}),n=0,r=f?(v-u*T)/f:0;n<u;++n,p=c)a=x[n],l=y[a],c=p+(l>0?l*r:0)+T,y[a]={data:t[a],index:n,value:l,startAngle:p,endAngle:c,padAngle:d};return y}var i=T,e=d,s=null,h=n(0),o=n(wt),_=n(0);return t.value=function(e){return arguments.length?(i="function"==typeof e?e:n(+e),t):i},t.sortValues=function(i){return arguments.length?(e=i,s=null,t):e},t.sort=function(i){return arguments.length?(s=i,e=null,t):s},t.startAngle=function(i){return arguments.length?(h="function"==typeof i?i:n(+i),t):h},t.endAngle=function(i){return arguments.length?(o="function"==typeof i?i:n(+i),t):o},t.padAngle=function(i){return arguments.length?(_="function"==typeof i?i:n(+i),t):_},t}function g(t){this._curve=t}function b(t){function i(i){return new g(t(i))}return i._curve=t,i}function w(t){var i=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?i(b(t)):i()._curve},t}function m(){return w(p().curve(mt))}function k(){var t=v().curve(mt),i=t.curve,n=t.lineX0,e=t.lineX1,s=t.lineY0,h=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return w(n())},delete t.lineX0,t.lineEndAngle=function(){return w(e())},delete t.lineX1,t.lineInnerRadius=function(){return w(s())},delete t.lineY0,t.lineOuterRadius=function(){return w(h())},delete t.lineY1,t.curve=function(t){return arguments.length?i(b(t)):i()._curve},t}function N(){function t(){var t;if(h||(h=t=i.path()),e.apply(this,arguments).draw(h,+s.apply(this,arguments)),t)return h=null,t+""||null}var e=n(kt),s=n(64),h=null;return t.type=function(i){return arguments.length?(e="function"==typeof i?i:n(i),t):e},t.size=function(i){return arguments.length?(s="function"==typeof i?i:n(+i),t):s},t.context=function(i){return arguments.length?(h=null==i?null:i,t):h},t}function S(){}function E(t,i,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+i)/6,(t._y0+4*t._y1+n)/6)}function A(t){this._context=t}function P(t){return new A(t)}function q(t){this._context=t}function C(t){return new q(t)}function O(t){this._context=t}function R(t){return new O(t)}function z(t,i){this._basis=new A(t),this._beta=i}function X(t,i,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-i),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Y(t,i){this._context=t,this._k=(1-i)/6}function B(t,i){this._context=t,this._k=(1-i)/6}function j(t,i){this._context=t,this._k=(1-i)/6}function I(t,i,n){var e=t._x1,s=t._y1,h=t._x2,o=t._y2;if(t._l01_a>Mt){var _=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,a=3*t._l01_a*(t._l01_a+t._l12_a);e=(e*_-t._x0*t._l12_2a+t._x2*t._l01_2a)/a,s=(s*_-t._y0*t._l12_2a+t._y2*t._l01_2a)/a}if(t._l23_a>Mt){var r=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);h=(h*r+t._x1*t._l23_2a-i*t._l12_2a)/c,o=(o*r+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(e,s,h,o,t._x2,t._y2)}function L(t,i){this._context=t,this._alpha=i}function D(t,i){this._context=t,this._alpha=i}function W(t,i){this._context=t,this._alpha=i}function V(t){this._context=t}function F(t){return new V(t)}function G(t){return t<0?-1:1}function H(t,i,n){var e=t._x1-t._x0,s=i-t._x1,h=(t._y1-t._y0)/(e||s<0&&-0),o=(n-t._y1)/(s||e<0&&-0),_=(h*s+o*e)/(e+s);return(G(h)+G(o))*Math.min(Math.abs(h),Math.abs(o),.5*Math.abs(_))||0}function J(t,i){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-i)/2:i}function K(t,i,n){var e=t._x0,s=t._y0,h=t._x1,o=t._y1,_=(h-e)/3;t._context.bezierCurveTo(e+_,s+_*i,h-_,o-_*n,h,o)}function Q(t){this._context=t}function U(t){this._context=new Z(t)}function Z(t){this._context=t}function $(t){return new Q(t)}function tt(t){return new U(t)}function it(t){this._context=t}function nt(t){var i,n,e=t.length-1,s=new Array(e),h=new Array(e),o=new Array(e);for(s[0]=0,h[0]=2,o[0]=t[0]+2*t[1],i=1;i<e-1;++i)s[i]=1,h[i]=4,o[i]=4*t[i]+2*t[i+1];for(s[e-1]=2,h[e-1]=7,o[e-1]=8*t[e-1]+t[e],i=1;i<e;++i)n=s[i]/h[i-1],h[i]-=n,o[i]-=n*o[i-1];for(s[e-1]=o[e-1]/h[e-1],i=e-2;i>=0;--i)s[i]=(o[i]-s[i+1])/h[i];for(h[e-1]=(t[e]+s[e-1])/2,i=0;i<e-1;++i)h[i]=2*t[i+1]-s[i+1];return[s,h]}function et(t){return new it(t)}function st(t,i){this._context=t,this._t=i}function ht(t){return new st(t,.5)}function ot(t){return new st(t,0)}function _t(t){return new st(t,1)}function at(t,i){if((e=t.length)>1)for(var n,e,s=1,h=t[i[0]],o=h.length;s<e;++s){n=h,h=t[i[s]];for(var _=0;_<o;++_)h[_][1]+=h[_][0]=isNaN(n[_][1])?n[_][0]:n[_][1]}}function rt(t){for(var i=t.length,n=new Array(i);--i>=0;)n[i]=i;return n}function ct(t,i){return t[i]}function lt(){function t(t){var n,o,_=i.apply(this,arguments),a=t.length,r=_.length,c=new Array(r);for(n=0;n<r;++n){for(var l,u=_[n],f=c[n]=new Array(a),x=0;x<a;++x)f[x]=l=[0,+h(t[x],u,x,t)],l.data=t[x];f.key=u}for(n=0,o=e(c);n<r;++n)c[o[n]].index=n;return s(c,o),c}var i=n([]),e=rt,s=at,h=ct;return t.keys=function(e){return arguments.length?(i="function"==typeof e?e:n(Ut.call(e)),t):i},t.value=function(i){return arguments.length?(h="function"==typeof i?i:n(+i),t):h},t.order=function(i){return arguments.length?(e=null==i?rt:"function"==typeof i?i:n(Ut.call(i)),t):e},t.offset=function(i){return arguments.length?(s=null==i?at:i,t):s},t}function ut(t,i){if((e=t.length)>0){for(var n,e,s,h=0,o=t[0].length;h<o;++h){for(s=n=0;n<e;++n)s+=t[n][h][1]||0;if(s)for(n=0;n<e;++n)t[n][h][1]/=s}at(t,i)}}function ft(t,i){if((n=t.length)>0){for(var n,e=0,s=t[i[0]],h=s.length;e<h;++e){for(var o=0,_=0;o<n;++o)_+=t[o][e][1]||0;s[e][1]+=s[e][0]=-_/2}at(t,i)}}function xt(t,i){if((s=t.length)>0&&(e=(n=t[i[0]]).length)>0){for(var n,e,s,h=0,o=1;o<e;++o){for(var _=0,a=0,r=0;_<s;++_){for(var c=t[i[_]],l=c[o][1]||0,u=c[o-1][1]||0,f=(l-u)/2,x=0;x<_;++x){var y=t[i[x]],p=y[o][1]||0,v=y[o-1][1]||0;f+=p-v}a+=l,r+=f*l}n[o-1][1]+=n[o-1][0]=h,a&&(h-=r/a)}n[o-1][1]+=n[o-1][0]=h,at(t,i)}}function yt(t){var i=t.map(pt);return rt(t).sort(function(t,n){return i[t]-i[n]})}function pt(t){for(var i,n=0,e=-1,s=t.length;++e<s;)(i=+t[e][1])&&(n+=i);return n}function vt(t){return yt(t).reverse()}function dt(t){var i,n,e=t.length,s=t.map(pt),h=rt(t).sort(function(t,i){return s[i]-s[t]}),o=0,_=0,a=[],r=[];for(i=0;i<e;++i)n=h[i],o<_?(o+=s[n],a.push(n)):(_+=s[n],r.push(n));return r.reverse().concat(a)}function Tt(t){return rt(t).reverse()}var Mt=1e-12,gt=Math.PI,bt=gt/2,wt=2*gt;u.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;default:this._context.lineTo(t,i)}}};var mt=b(f);g.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,i){this._curve.point(i*Math.sin(t),i*-Math.cos(t))}};var kt={draw:function(t,i){var n=Math.sqrt(i/gt);t.moveTo(n,0),t.arc(0,0,n,0,wt)}},Nt={draw:function(t,i){var n=Math.sqrt(i/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},St=Math.sqrt(1/3),Et=2*St,At={draw:function(t,i){var n=Math.sqrt(i/Et),e=n*St;t.moveTo(0,-n),t.lineTo(e,0),t.lineTo(0,n),t.lineTo(-e,0),t.closePath()}},Pt=.8908130915292852,qt=Math.sin(gt/10)/Math.sin(7*gt/10),Ct=Math.sin(wt/10)*qt,Ot=-Math.cos(wt/10)*qt,Rt={draw:function(t,i){var n=Math.sqrt(i*Pt),e=Ct*n,s=Ot*n;t.moveTo(0,-n),t.lineTo(e,s);for(var h=1;h<5;++h){var o=wt*h/5,_=Math.cos(o),a=Math.sin(o);t.lineTo(a*n,-_*n),t.lineTo(_*e-a*s,a*e+_*s)}t.closePath()}},zt={draw:function(t,i){var n=Math.sqrt(i),e=-n/2;t.rect(e,e,n,n)}},Xt=Math.sqrt(3),Yt={draw:function(t,i){var n=-Math.sqrt(i/(3*Xt));t.moveTo(0,2*n),t.lineTo(-Xt*n,-n),t.lineTo(Xt*n,-n),t.closePath()}},Bt=-.5,jt=Math.sqrt(3)/2,It=1/Math.sqrt(12),Lt=3*(It/2+1),Dt={draw:function(t,i){var n=Math.sqrt(i/Lt),e=n/2,s=n*It,h=e,o=n*It+n,_=-h,a=o;t.moveTo(e,s),t.lineTo(h,o),t.lineTo(_,a),t.lineTo(Bt*e-jt*s,jt*e+Bt*s),t.lineTo(Bt*h-jt*o,jt*h+Bt*o),t.lineTo(Bt*_-jt*a,jt*_+Bt*a),t.lineTo(Bt*e+jt*s,Bt*s-jt*e),t.lineTo(Bt*h+jt*o,Bt*o-jt*h),t.lineTo(Bt*_+jt*a,Bt*a-jt*_),t.closePath()}},Wt=[kt,Nt,At,zt,Rt,Yt,Dt];A.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:E(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},q.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._x2=t,this._y2=i;break;case 1:this._point=2,this._x3=t,this._y3=i;break;case 2:this._point=3,this._x4=t,this._y4=i,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+i)/6);break;default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},O.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,e=(this._y0+4*this._y1+i)/6;this._line?this._context.lineTo(n,e):this._context.moveTo(n,e);break;case 3:this._point=4;default:E(this,t,i)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i}},z.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,i=this._y,n=t.length-1;if(n>0)for(var e,s=t[0],h=i[0],o=t[n]-s,_=i[n]-h,a=-1;++a<=n;)e=a/n,this._basis.point(this._beta*t[a]+(1-this._beta)*(s+e*o),this._beta*i[a]+(1-this._beta)*(h+e*_));this._x=this._y=null,this._basis.lineEnd()},point:function(t,i){this._x.push(+t),this._y.push(+i)}};var Vt=function t(i){function n(t){return 1===i?new A(t):new z(t,i)}return n.beta=function(i){return t(+i)},n}(.85);Y.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:X(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2,this._x1=t,this._y1=i;break;case 2:this._point=3;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Ft=function t(i){function n(t){return new Y(t,i)}return n.tension=function(i){return t(+i)},n}(0);B.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._x3=t,this._y3=i;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=i);break;case 2:this._point=3,this._x5=t,this._y5=i;break;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Gt=function t(i){function n(t){return new B(t,i)}return n.tension=function(i){return t(+i)},n}(0);j.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:X(this,t,i)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Ht=function t(i){function n(t){return new j(t,i)}return n.tension=function(i){return t(+i)},n}(0);L.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Jt=function t(i){function n(t){return i?new L(t,i):new Y(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);D.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=i;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=i);break;case 2:this._point=3,this._x5=t,this._y5=i;break;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Kt=function t(i){function n(t){return i?new D(t,i):new B(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);W.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){if(t=+t,i=+i,this._point){var n=this._x2-t,e=this._y2-i;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+e*e,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:I(this,t,i)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=i}};var Qt=function t(i){function n(t){return i?new W(t,i):new j(t,0)}return n.alpha=function(i){return t(+i)},n}(.5);V.prototype={areaStart:S,areaEnd:S,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,i){t=+t,i=+i,this._point?this._context.lineTo(t,i):(this._point=1,this._context.moveTo(t,i))}},Q.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:K(this,this._t0,J(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,i){var n=NaN;if(t=+t,i=+i,t!==this._x1||i!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;break;case 2:this._point=3,K(this,J(this,n=H(this,t,i)),n);break;default:K(this,this._t0,n=H(this,t,i))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=i,this._t0=n}}},(U.prototype=Object.create(Q.prototype)).point=function(t,i){Q.prototype.point.call(this,i,t)},Z.prototype={moveTo:function(t,i){this._context.moveTo(i,t)},closePath:function(){this._context.closePath()},lineTo:function(t,i){this._context.lineTo(i,t)},bezierCurveTo:function(t,i,n,e,s,h){this._context.bezierCurveTo(i,t,e,n,h,s)}},it.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,i=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],i[0]):this._context.moveTo(t[0],i[0]),2===n)this._context.lineTo(t[1],i[1]);else for(var e=nt(t),s=nt(i),h=0,o=1;o<n;++h,++o)this._context.bezierCurveTo(e[0][h],s[0][h],e[1][h],s[1][h],t[o],i[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,i){this._x.push(+t),this._y.push(+i)}},st.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,i){switch(t=+t,i=+i,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,i):this._context.moveTo(t,i);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,i),this._context.lineTo(t,i);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,i)}}this._x=t,this._y=i}};var Ut=Array.prototype.slice;t.arc=l,t.area=v,t.line=p,t.pie=M,t.radialArea=k,t.radialLine=m,t.symbol=N,t.symbols=Wt,t.symbolCircle=kt,t.symbolCross=Nt,t.symbolDiamond=At,t.symbolSquare=zt,t.symbolStar=Rt,t.symbolTriangle=Yt,t.symbolWye=Dt,t.curveBasisClosed=C,t.curveBasisOpen=R,t.curveBasis=P,t.curveBundle=Vt,t.curveCardinalClosed=Gt,t.curveCardinalOpen=Ht,t.curveCardinal=Ft,t.curveCatmullRomClosed=Kt,t.curveCatmullRomOpen=Qt,t.curveCatmullRom=Jt,t.curveLinearClosed=F,t.curveLinear=f,t.curveMonotoneX=$,t.curveMonotoneY=tt,t.curveNatural=et,t.curveStep=ht,t.curveStepAfter=_t,t.curveStepBefore=ot,t.stack=lt,t.stackOffsetExpand=ut,t.stackOffsetNone=at,t.stackOffsetSilhouette=ft,t.stackOffsetWiggle=xt,t.stackOrderAscending=yt,t.stackOrderDescending=vt,t.stackOrderInsideOut=dt,t.stackOrderNone=rt,t.stackOrderReverse=Tt,Object.defineProperty(t,"__esModule",{value:!0})}); |
{ | ||
"name": "d3-shape", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Graphical primitives for visualization, such as lines and areas.", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -49,3 +49,3 @@ import {epsilon} from "../math"; | ||
case 2: this._context.lineTo(this._x2, this._y2); break; | ||
case 3: this.point(this, this._x2, this._y2); break; | ||
case 3: this.point(this._x2, this._y2); break; | ||
} | ||
@@ -52,0 +52,0 @@ if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
923257