Fix loss of significance for d3.geom.polygon.area.

This commit is contained in:
Jason Davies 2012-12-06 10:40:06 +00:00
Родитель 1cc0fe8292
Коммит 915f044b8f
4 изменённых файлов: 22 добавлений и 11 удалений

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

@ -6485,12 +6485,11 @@
}
d3.geom.polygon = function(coordinates) {
coordinates.area = function() {
var i = 0, n = coordinates.length, a = coordinates[n - 1][0] * coordinates[0][1], b = coordinates[n - 1][1] * coordinates[0][0];
var i = 0, n = coordinates.length, area = coordinates[n - 1][1] * coordinates[0][0] - coordinates[n - 1][0] * coordinates[0][1];
while (++i < n) {
a += coordinates[i - 1][0] * coordinates[i][1];
b += coordinates[i - 1][1] * coordinates[i][0];
area += coordinates[i - 1][1] * coordinates[i][0] - coordinates[i - 1][0] * coordinates[i][1];
}
return (b - a) * .5;
return area * .5;
};
coordinates.centroid = function(k) {
var i = -1, n = coordinates.length, x = 0, y = 0, a, b = coordinates[n - 1], c;

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

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

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

@ -3,13 +3,11 @@ d3.geom.polygon = function(coordinates) {
coordinates.area = function() {
var i = 0,
n = coordinates.length,
a = coordinates[n - 1][0] * coordinates[0][1],
b = coordinates[n - 1][1] * coordinates[0][0];
area = coordinates[n - 1][1] * coordinates[0][0] - coordinates[n - 1][0] * coordinates[0][1];
while (++i < n) {
a += coordinates[i - 1][0] * coordinates[i][1];
b += coordinates[i - 1][1] * coordinates[i][0];
area += coordinates[i - 1][1] * coordinates[i][0] - coordinates[i - 1][0] * coordinates[i][1];
}
return (b - a) * .5;
return area * .5;
};
coordinates.centroid = function(k) {

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

@ -75,7 +75,21 @@ suite.addBatch({
assert.inDelta(centroid[0], 2, 1e-6);
assert.inDelta(centroid[1], 2, 1e-6);
}
}
},
"large square": {
topic: function() {
var r = 1e8,
d = d3.range(0, r, r / 1e4);
return d3.geom.polygon(
d.map(function(y) { return [0, y]; }).concat(
d.map(function(x) { return [x, r]; })).concat(
d.map(function(y) { return [r, y]; }).reverse()).concat(
d.map(function(x) { return [x, 0]; }).reverse()));
},
"has area 1e16 - 5e7": function(polygon) {
assert.equal(polygon.area(), 1e16 - 5e7);
}
},
});
suite.export(module);