Sort half-edges before generating triangles.
Also, ensure triangles are only generated for connected edges, which is not always the case in unclosed (border) sites.
This commit is contained in:
Родитель
ebf9a94ac7
Коммит
859d0c3818
|
@ -5160,13 +5160,15 @@ d3 = function() {
|
||||||
voronoi.triangles = function(data) {
|
voronoi.triangles = function(data) {
|
||||||
var triangles = [];
|
var triangles = [];
|
||||||
d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
|
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;
|
var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, h0, s0, h1 = edges[m - 1], e1 = h1.edge, s1 = e1.l === site ? e1.r : e1.l;
|
||||||
while (++j < m) {
|
while (++j < m) {
|
||||||
e0 = e1;
|
e0 = e1;
|
||||||
|
h0 = h1;
|
||||||
s0 = s1;
|
s0 = s1;
|
||||||
e1 = edges[j].edge;
|
h1 = edges[j];
|
||||||
|
e1 = h1.edge;
|
||||||
s1 = e1.l === site ? e1.r : e1.l;
|
s1 = e1.l === site ? e1.r : e1.l;
|
||||||
if (d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
|
if (h0.end() === h1.start() && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
|
||||||
triangles.push([ data[i], data[s0.i], data[s1.i] ]);
|
triangles.push([ data[i], data[s0.i], data[s1.i] ]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -51,20 +51,24 @@ d3.geom.voronoi = function(points) {
|
||||||
|
|
||||||
d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
|
d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
|
||||||
var site = cell.site,
|
var site = cell.site,
|
||||||
edges = cell.edges,
|
edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder),
|
||||||
j = -1,
|
j = -1,
|
||||||
m = edges.length,
|
m = edges.length,
|
||||||
e0,
|
e0,
|
||||||
|
h0,
|
||||||
s0,
|
s0,
|
||||||
e1 = edges[m - 1].edge,
|
h1 = edges[m - 1],
|
||||||
|
e1 = h1.edge,
|
||||||
s1 = e1.l === site ? e1.r : e1.l;
|
s1 = e1.l === site ? e1.r : e1.l;
|
||||||
|
|
||||||
while (++j < m) {
|
while (++j < m) {
|
||||||
e0 = e1;
|
e0 = e1;
|
||||||
|
h0 = h1;
|
||||||
s0 = s1;
|
s0 = s1;
|
||||||
e1 = edges[j].edge;
|
h1 = edges[j];
|
||||||
|
e1 = h1.edge;
|
||||||
s1 = e1.l === site ? e1.r : e1.l;
|
s1 = e1.l === site ? e1.r : e1.l;
|
||||||
if (d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
|
if (h0.end() === h1.start() && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
|
||||||
triangles.push([data[i], data[s0.i], data[s1.i]]);
|
triangles.push([data[i], data[s0.i], data[s1.i]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче