2017-08-23 2 views
1

Hallo ich bin neu in D3 und ich kann keine Beispiele finden ein d3 Force-Layout, das Barrieren hat, die Pfade sind. Ich denke so etwas.Ist eine Knotenschranke mit d3-Force-Layout möglich?

Hour glass of circle nodes

wie diese aber unregelmäßige Begrenzung, kein Feld. https://bl.ocks.org/mbostock/1129492

+0

Verwandte (D3 V4): https://stackoverflow.com/questions/39928306/d3-js-force-layout-boundary-issue-v4 möchten Sie dies auf einer bestimmten Version von D3 tun? –

+0

Dies könnte auch hilfreich sein: erkennen, ob Punkt in einem Polygon ist https://StackOverflow.com/questions/13279165/How-to-find-if-point-is-inside-polygon-in-d3-js –

+0

ich war Ich wollte es in v4 machen und dachte, dass vielleicht einer der Knoten die Kräfte ignorieren und gezielt platziert werden könnte und eine negative Ladung abgeben würde, die die anderen Knoten abstoßen würde. – zippyferguson

Antwort

-2

Ich sehe nicht, warum es nicht möglich ist, den Code im Beispiel:

function tick() { 
node.attr("cx", function(d) { return d.x = Math.max(radius, Math.min(width - radius, d.x)); }) 
    .attr("cy", function(d) { return d.y = Math.max(radius, Math.min(height - radius, d.y)); }); 

setzt einfach Maximal- und Minimalwerte für die Mitte der Knoten (cx und cy). Wenn Sie also eine Gleichung schreiben können, die die Form der Kante darstellt, die Sie erstellen möchten, sollten Sie die Knoten innerhalb dieser Form enthalten können.

Die Schwierigkeit könnte in der Spiegelung der Form auf der anderen Seite des Svg sein.

Etwas wie:

function tick() { 
node.attr("cx", function(d) { return function(d){ 
d.x = Math.max(radius, Math.min(d3.select(this).attr("cy")- radius, d.x)); }} 
.attr("cy", function(d) { return d.y = Math.max(radius, Math.min(height - radius, d.y))) 
} 

denke ich, dass eine diagonale Linie auf der rechten Seite mit einem 1 gesetzt sollte aber offensichtlich ein Gefälle nicht getestet und es könnte verlangsamen massiv die Kraft.