Fix loss of significance for d3.geom.polygon.area.
This commit is contained in:
Родитель
1cc0fe8292
Коммит
915f044b8f
|
@ -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;
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче