Another minor optimisation.
This commit is contained in:
Родитель
57ee53a232
Коммит
e431bc5962
|
@ -2031,10 +2031,10 @@
|
|||
return [ coordinates[0] * d3_degrees, coordinates[1] * d3_degrees ];
|
||||
}
|
||||
function interpolate(s0, s1, context) {
|
||||
var point, λ = s1 ? π : -π, φ = λ / 2;
|
||||
context.lineTo((point = projectPoint(-λ, φ))[0], point[1]);
|
||||
var point, φ = s1 / 2;
|
||||
context.lineTo((point = projectPoint(s0, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(0, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(λ, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(s1, φ))[0], point[1]);
|
||||
}
|
||||
function rotatePoint(coordinates) {
|
||||
return rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
|
||||
|
@ -2057,17 +2057,17 @@
|
|||
};
|
||||
p.line = function(coordinates, context) {
|
||||
if (!(n = coordinates.length)) return;
|
||||
var point = rotatePoint(coordinates[0]), λ0 = point[0], φ0 = point[1], λ1, φ1, δλ, sλ0 = λ0 > 0, sλ1, i = 0, n;
|
||||
var point = rotatePoint(coordinates[0]), λ0 = point[0], φ0 = point[1], λ1, φ1, sλ0 = λ0 > 0 ? π : -π, sλ1, δλ, i = 0, n;
|
||||
context.moveTo((point = projectPoint(λ0, φ0))[0], point[1]);
|
||||
while (++i < n) {
|
||||
point = rotatePoint(coordinates[i]);
|
||||
λ1 = point[0];
|
||||
φ1 = point[1];
|
||||
sλ1 = λ1 > 0;
|
||||
if (sλ0 ^ sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
sλ1 = λ1 > 0 ? π : -π;
|
||||
if (sλ0 !== sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
φ0 = d3_geo_projectionIntersectAntemeridian(λ0, φ0, λ1, φ1);
|
||||
context.lineTo((point = projectPoint(sλ0 ? π : -π, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ0 ? -π : π, φ0))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(sλ0, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ1, φ0))[0], point[1]);
|
||||
}
|
||||
context.lineTo((point = projectPoint(λ0 = λ1, φ0 = φ1))[0], point[1]);
|
||||
sλ0 = sλ1;
|
||||
|
@ -2075,21 +2075,21 @@
|
|||
};
|
||||
p.ring = function(coordinates, context) {
|
||||
if (!(n = coordinates.length)) return;
|
||||
var point = rotatePoint(coordinates[0]), λ0 = point[0], φ0 = point[1], segment = [ point = projectPoint(λ0, φ0) ], λ1, φ1, sλ0 = λ0 > 0, sλ1, segmentSide, δλ, i = 0, first = true, side, n;
|
||||
var point = rotatePoint(coordinates[0]), λ0 = point[0], φ0 = point[1], segment = [ point = projectPoint(λ0, φ0) ], λ1, φ1, sλ0 = λ0 > 0 ? π : -π, sλ1, segmentSide, δλ, i = 0, first = true, side, n;
|
||||
while (++i < n) {
|
||||
point = rotatePoint(coordinates[i]);
|
||||
λ1 = point[0];
|
||||
φ1 = point[1];
|
||||
sλ1 = λ1 > 0;
|
||||
if (sλ0 ^ sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
sλ1 = λ1 > 0 ? π : -π;
|
||||
if (sλ0 !== sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
φ0 = d3_geo_projectionIntersectAntemeridian(λ0, φ0, λ1, φ1);
|
||||
point = projectPoint(sλ0 ? π : -π, φ0);
|
||||
point = projectPoint(sλ0, φ0);
|
||||
if (first) segment.push(point), segmentSide = sλ0; else {
|
||||
if (sλ0 ^ side) interpolate(sλ0, side, context);
|
||||
if (sλ0 !== side) interpolate(sλ0, side, context);
|
||||
context.lineTo(point[0], point[1]);
|
||||
context.closePath();
|
||||
}
|
||||
context.moveTo((point = projectPoint(sλ0 ? -π : π, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ1, φ0))[0], point[1]);
|
||||
side = sλ1;
|
||||
first = false;
|
||||
}
|
||||
|
@ -2099,7 +2099,7 @@
|
|||
}
|
||||
if (first) context.moveTo((point = segment[0])[0], point[1]);
|
||||
for (i = 1, n = segment.length; i < n; i++) context.lineTo((point = segment[i])[0], point[1]);
|
||||
if (!first && side ^ segmentSide) interpolate(segmentSide, side, context);
|
||||
if (!first && side !== segmentSide) interpolate(segmentSide, side, context);
|
||||
context.closePath();
|
||||
};
|
||||
p.scale = function(_) {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -42,9 +42,9 @@ function d3_geo_projectionMutator(projectAt) {
|
|||
φ0 = point[1],
|
||||
λ1,
|
||||
φ1,
|
||||
δλ,
|
||||
sλ0 = λ0 > 0,
|
||||
sλ0 = λ0 > 0 ? π : -π,
|
||||
sλ1,
|
||||
δλ,
|
||||
i = 0,
|
||||
n;
|
||||
context.moveTo((point = projectPoint(λ0, φ0))[0], point[1]);
|
||||
|
@ -52,11 +52,11 @@ function d3_geo_projectionMutator(projectAt) {
|
|||
point = rotatePoint(coordinates[i]);
|
||||
λ1 = point[0];
|
||||
φ1 = point[1];
|
||||
sλ1 = λ1 > 0;
|
||||
if (sλ0 ^ sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
sλ1 = λ1 > 0 ? π : -π;
|
||||
if (sλ0 !== sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
φ0 = d3_geo_projectionIntersectAntemeridian(λ0, φ0, λ1, φ1);
|
||||
context.lineTo((point = projectPoint(sλ0 ? π : -π, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ0 ? -π : π, φ0))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(sλ0, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ1, φ0))[0], point[1]);
|
||||
}
|
||||
context.lineTo((point = projectPoint(λ0 = λ1, φ0 = φ1))[0], point[1]);
|
||||
sλ0 = sλ1;
|
||||
|
@ -71,7 +71,7 @@ function d3_geo_projectionMutator(projectAt) {
|
|||
segment = [point = projectPoint(λ0, φ0)],
|
||||
λ1,
|
||||
φ1,
|
||||
sλ0 = λ0 > 0,
|
||||
sλ0 = λ0 > 0 ? π : -π,
|
||||
sλ1,
|
||||
segmentSide, // the side of the last point in the buffered segment.
|
||||
δλ,
|
||||
|
@ -83,17 +83,17 @@ function d3_geo_projectionMutator(projectAt) {
|
|||
point = rotatePoint(coordinates[i]);
|
||||
λ1 = point[0];
|
||||
φ1 = point[1];
|
||||
sλ1 = λ1 > 0;
|
||||
if (sλ0 ^ sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
sλ1 = λ1 > 0 ? π : -π;
|
||||
if (sλ0 !== sλ1 && ((δλ = Math.abs(λ1 - λ0)) >= π || δλ < ε && Math.abs(Math.abs(λ0) - π) < ε)) {
|
||||
φ0 = d3_geo_projectionIntersectAntemeridian(λ0, φ0, λ1, φ1);
|
||||
point = projectPoint(sλ0 ? π : -π, φ0);
|
||||
point = projectPoint(sλ0, φ0);
|
||||
if (first) segment.push(point), segmentSide = sλ0;
|
||||
else {
|
||||
if (sλ0 ^ side) interpolate(sλ0, side, context);
|
||||
if (sλ0 !== side) interpolate(sλ0, side, context);
|
||||
context.lineTo(point[0], point[1]);
|
||||
context.closePath();
|
||||
}
|
||||
context.moveTo((point = projectPoint(sλ0 ? -π : π, φ0))[0], point[1]);
|
||||
context.moveTo((point = projectPoint(sλ1, φ0))[0], point[1]);
|
||||
side = sλ1;
|
||||
first = false;
|
||||
}
|
||||
|
@ -104,18 +104,17 @@ function d3_geo_projectionMutator(projectAt) {
|
|||
}
|
||||
if (first) context.moveTo((point = segment[0])[0], point[1]);
|
||||
for (i = 1, n = segment.length; i < n; i++) context.lineTo((point = segment[i])[0], point[1]);
|
||||
if (!first && side ^ segmentSide) interpolate(segmentSide, side, context);
|
||||
if (!first && side !== segmentSide) interpolate(segmentSide, side, context);
|
||||
context.closePath();
|
||||
};
|
||||
|
||||
function interpolate(s0, s1, context) {
|
||||
// TODO cache
|
||||
var point,
|
||||
λ = s1 ? π : -π,
|
||||
φ = λ / 2;
|
||||
context.lineTo((point = projectPoint(-λ, φ))[0], point[1]);
|
||||
φ = s1 / 2;
|
||||
context.lineTo((point = projectPoint(s0, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint( 0, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint( λ, φ))[0], point[1]);
|
||||
context.lineTo((point = projectPoint(s1, φ))[0], point[1]);
|
||||
}
|
||||
|
||||
// TODO remove redundant code with p(coordinates)
|
||||
|
|
Загрузка…
Ссылка в новой задаче