2016-05-20 4 views
0

Dies wurde während der Verwendung von Dreiecken() entdeckt, um ein Netz zum Interpolieren einiger Punkte zu erzeugen. Ich bemerkte, dass einige meiner Punkte nicht in Dreiecken waren. Ich war überrascht zu sehen, dass ein Dreieck im Netz fehlte. Meine Daten wurden auf 4 Scheitelpunkte reduziert, was zu 2 Dreiecken führen sollte, aber nur 1 ergibt. Ich habe versucht, die Scheitelpunkte etwas zu verändern, was zu der erwarteten Anzahl von Dreiecken führt.Warum fehlt im Rückgabewert von d3.voronoi.triangles ein Dreieck?

v = require("d3-voronoi").voronoi(); 

vertices = [[47.307,105.33],[51.707,104.13],[52.717,110.74],[53.917,106.34]]; 

console.log(v.triangles(vertices)); // returns 1 triangle 

vertices[3][1] += 0.001 // tweak one of the values slightly 

console.log(v.triangles(vertices)); // returns 2 triangles (as expected) 

https://tonicdev.com/56f99ca738ca281100ea16ad/573f3672a04fd4110009ee44

Ich habe nicht viel Glück Schritt wenn d3-voronoi (Vergleich der Weg des Scheiterns der erfolgreichen Fall), seit ich mit dem Algorithmus nicht vertraut bin verwendet.

Ich vermute numerischen Fehler, aber ich bin mir nicht sicher, wie dieses Problem zu finden oder zu umgehen.

Auf der Suche nach Hilfe zur Lösung des Problems in D3-Voronoi (ideal), oder eine Empfehlung für eine andere (numerisch stabile) Mattengenerierungsfunktion.

+0

entschieden. Ich habe diesen Fehler behoben, indem ich zu einem anderen Paket gewechselt habe: [delaunay-triangulate] (https://www.npmjs.com/package/delaunay -dianguliert) –

Antwort

0

Ich kreiste schließlich zurück zu dieser Frage und postete einen issue zum d3-voronoi Repo.

Die Antwort kam schnell zurück, cocircular Punkte, die (einfach gesagt) ein Problem für den Voronoi-Algorithmus sind.

Meine Optionen sind zufällige Jitter zu meinen Daten hinzuzufügen oder die Dreiecke direkt zu berechnen. Wie bereits erwähnt, habe ich mich für die letzte Version mit dem delaunay-triangulate Paket