This commit is contained in:
Mike Bostock 2013-10-05 11:15:43 -07:00
Родитель 4f51b3f37f
Коммит ebf9a94ac7
3 изменённых файлов: 50 добавлений и 7 удалений

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

@ -5158,7 +5158,20 @@ d3 = function() {
});
};
voronoi.triangles = function(data) {
throw new Error("not yet implemented");
var triangles = [];
d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
var site = cell.site, edges = cell.edges, j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;
while (++j < m) {
e0 = e1;
s0 = s1;
e1 = edges[j].edge;
s1 = e1.l === site ? e1.r : e1.l;
if (d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
triangles.push([ data[i], data[s0.i], data[s1.i] ]);
}
}
});
return triangles;
};
voronoi.x = function(_) {
return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;
@ -5178,6 +5191,9 @@ d3 = function() {
return voronoi;
};
var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];
function d3_geom_voronoiTriangleArea(a, b, c) {
return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
}
d3.geom.delaunay = function(vertices) {
throw new Error("not yet implemented");
};

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

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

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

@ -47,7 +47,30 @@ d3.geom.voronoi = function(points) {
};
voronoi.triangles = function(data) {
throw new Error("not yet implemented");
var triangles = [];
d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
var site = cell.site,
edges = cell.edges,
j = -1,
m = edges.length,
e0,
s0,
e1 = edges[m - 1].edge,
s1 = e1.l === site ? e1.r : e1.l;
while (++j < m) {
e0 = e1;
s0 = s1;
e1 = edges[j].edge;
s1 = e1.l === site ? e1.r : e1.l;
if (d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
triangles.push([data[i], data[s0.i], data[s1.i]]);
}
}
});
return triangles;
};
voronoi.x = function(_) {
@ -74,3 +97,7 @@ d3.geom.voronoi = function(points) {
};
var d3_geom_voronoiClipExtent = [[-1e6, -1e6], [1e6, 1e6]];
function d3_geom_voronoiTriangleArea(a, b, c) {
return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
}