Comments (4)
Here is a notebook to reproduce: https://observablehq.com/d/7624520d45e4b44f (In the future, if you’d be willing to share these reproductions as an Observable notebook, it would save us some time. Thank you!)
It renders fine when scaled and translated, as here with Plot:
Plot.marks(Plot.voronoi(points), Plot.delaunayMesh(points)).plot()
But it looks like the there are some problems computing the Voronoi cell edges for points on the Delaunay hull.
from d3-delaunay.
Not that it helps much to understand why the bug happens, but this test case is correct under d3-delaunay@4.
from d3-delaunay.
In the collinear case (a "flat triangle" on the hull)
Line 41 in 48d091f
In this case a is sometimes 0, or going in the wrong direction, because the reference point r (point 36, marked as a green circle) happens to be exactly on the hull, and collinear with the (flat) triangle whose circumcenter we're trying to compute.
So, any flat triangle on the collinear part of the hull has a 1/2 chance to have its (degenerate) circumcenter be projected in the wrong direction. This results in the weird polygonCell 180 (also in green).
A quick and dirty patch:
- const r = triangles[0] * 2;
- a *= Math.sign((points[r] - x1) * ey - (points[r + 1] - y1) * ex);
+ let i=0;
+ while (i < triangles.length && Math.abs(a) < 1e-3) {
+ const r = triangles[i++] * 2;
+ a = ((points[r] - x1) * ey - (points[r + 1] - y1) * ex);
+ }
+ a = Math.sign(a) * 1e9;
There might be a better approach though, using the fact that the hull points are enumerated clockwise? Needs a bit more thought.
from d3-delaunay.
#142 fixes it, thanks for the test case!
from d3-delaunay.
Related Issues (20)
- Generating higher-order Voronoi diagrams HOT 1
- Adding points incrementally without retriangulating HOT 3
- voronoi.cellPolygons skips null cells, and doesn’t report the cell’s index. HOT 3
- README misleading with "no-dependency library" line HOT 2
- Error with es6 worker + es6 modules HOT 18
- Would it be possible to make this work with a convex hull boundary for the Voronoi cells? HOT 2
- Delaunay points are a list of NaN HOT 1
- _edge() Comparison of numbers is unsafe HOT 5
- voronoi tiling goes a bit crazy when points are duplicated in the input HOT 1
- Broken voronoi HOT 3
- Update rollup and rollup-plugin-terser HOT 2
- Cosmetic Index out of bound check fix. HOT 1
- Minor change: Only compute bl and cl when needed. HOT 1
- renderPoints(5) crashes
- context.moveTo and context.lineTo implementation HOT 1
- Voronoi Polygon generator HOT 1
- convenience delaunay.edges() function?
- voronoi don't cover the rectangle? HOT 7
- Edges that both sides are clipped sometimes will not be identified as voronoi neighbor HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from d3-delaunay.