This commit is contained in:
Jason Davies 2012-09-26 09:29:01 +01:00
Родитель 57ee53a232
Коммит e431bc5962
3 изменённых файлов: 35 добавлений и 36 удалений

30
d3.v2.js поставляемый
Просмотреть файл

@ -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(0 ? -π : π, φ0))[0], point[1]);
context.lineTo((point = projectPoint(sλ0, φ0))[0], point[1]);
context.moveTo((point = projectPoint(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(0 ? -π : π, φ0))[0], point[1]);
context.moveTo((point = projectPoint(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(_) {

8
d3.v2.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -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(0 ? -π : π, φ0))[0], point[1]);
context.lineTo((point = projectPoint(sλ0, φ0))[0], point[1]);
context.moveTo((point = projectPoint(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(0 ? -π : π, φ0))[0], point[1]);
context.moveTo((point = projectPoint(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)