Remove resampling temporary state.

This commit is contained in:
Jason Davies 2012-12-12 09:19:58 +00:00
Родитель 31d59cfc93
Коммит 6091249215
3 изменённых файлов: 23 добавлений и 31 удалений

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

@ -6385,15 +6385,9 @@
function resamplePoint(point) { function resamplePoint(point) {
return projectPoint(point[0], point[1]); return projectPoint(point[0], point[1]);
} }
var λ00, φ00, λ0, sinφ0, cosφ0, x0, y0;
function resampleLine(coordinates) { function resampleLine(coordinates) {
if (!(n = coordinates.length)) return coordinates; if (!(n = coordinates.length)) return coordinates;
var n, i = 0, p = coordinates[0], λ, φ, line; var n, i = 0, p = coordinates[0], λ, φ, λ0, line = [ p = projectPoint(λ0 = p[0], φ = p[1]) ], sinφ0 = Math.sin(φ), cosφ0 = Math.cos(φ), x0 = p[0], y0 = p[1];
line = [ p = projectPoint(λ00 = λ0 = p[0], φ00 = φ = p[1]) ];
sinφ0 = Math.sin(φ);
cosφ0 = Math.cos(φ);
x0 = p[0];
y0 = p[1];
while (++i < n) { while (++i < n) {
p = coordinates[i]; p = coordinates[i];
p = projectPoint(λ = p[0], φ = p[1]); p = projectPoint(λ = p[0], φ = p[1]);
@ -6403,11 +6397,12 @@
return line; return line;
} }
function resamplePolygon(coordinates) { function resamplePolygon(coordinates) {
var n = coordinates.length, i = -1, polygon = [], ring, p; var n = coordinates.length, i = -1, polygon = [], ring, resampled, l, m, p;
while (++i < n) { while (++i < n) {
polygon.push(ring = resampleLine(coordinates[i])); polygon.push(resampled = resampleLine(ring = coordinates[i]));
p = projectPoint(λ00, φ00); m = ring.length - 1;
resampleLineTo(x0, y0, λ0, sinφ0, cosφ0, p[0], p[1], λ00, Math.sin(φ00), Math.cos(φ00), maxDepth, ring); l = resampled.length - 1;
resampleLineTo((p = ring[0])[0], p[1], (p = resampled[0])[0], Math.sin(p[1]), Math.cos(p[1]), (p = ring[m])[0], p[1], (p = resampled[l])[0], Math.sin(p[1]), Math.cos(p[1]), maxDepth, ring);
} }
return polygon; return polygon;
} }

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

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

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

@ -137,16 +137,6 @@ function d3_geo_projectionMutator(projectAt) {
return projectPoint(point[0], point[1]); return projectPoint(point[0], point[1]);
} }
// Temporary state used by resampleLine & resamplePolygon.
// TODO find a cleaner way to encapsulate this temporary state?
var λ00,
φ00,
λ0,
sinφ0,
cosφ0,
x0,
y0;
// TODO rename: this is not just resampling, it also projects and transforms! // TODO rename: this is not just resampling, it also projects and transforms!
function resampleLine(coordinates) { function resampleLine(coordinates) {
if (!(n = coordinates.length)) return coordinates; if (!(n = coordinates.length)) return coordinates;
@ -155,11 +145,11 @@ function d3_geo_projectionMutator(projectAt) {
p = coordinates[0], p = coordinates[0],
λ, λ,
φ, φ,
line; λ0,
line = [p = projectPoint(λ00 = λ0 = p[0], φ00 = φ = p[1])]; line = [p = projectPoint(λ0 = p[0], φ = p[1])],
sinφ0 = Math.sin(φ); sinφ0 = Math.sin(φ),
cosφ0 = Math.cos(φ); cosφ0 = Math.cos(φ),
x0 = p[0]; x0 = p[0],
y0 = p[1]; y0 = p[1];
while (++i < n) { while (++i < n) {
p = coordinates[i]; p = coordinates[i];
@ -178,11 +168,18 @@ function d3_geo_projectionMutator(projectAt) {
i = -1, i = -1,
polygon = [], polygon = [],
ring, ring,
resampled,
l,
m,
p; p;
while (++i < n) { while (++i < n) {
polygon.push(ring = resampleLine(coordinates[i])); polygon.push(resampled = resampleLine(ring = coordinates[i]));
p = projectPoint(λ00, φ00); // TODO isn't this the same as ring[0]? m = ring.length - 1;
resampleLineTo(x0, y0, λ0, sinφ0, cosφ0, p[0], p[1], λ00, Math.sin(φ00), Math.cos(φ00), maxDepth, ring); l = resampled.length - 1;
resampleLineTo(
(p = ring[0])[0], p[1], (p = resampled[0])[0], Math.sin(p[1]), Math.cos(p[1]),
(p = ring[m])[0], p[1], (p = resampled[l])[0], Math.sin(p[1]), Math.cos(p[1]),
maxDepth, ring);
} }
return polygon; return polygon;
} }