In questo esempio: http://bl.ocks.org/mbostock/1747543:evitare la collisione tra i nodi e spigoli in D3 disposizione vigore
... Mike ci mostra come evitare collisioni tra i nodi in modo che non ci sono due nodi si sovrappongono l'un l'altro.
Mi chiedo se sia possibile evitare la collisione tra i nodi e i bordi in modo che nessun nodo 'clip' o si sovrapponga a un bordo a meno che non sia collegato da quel bordo.
Il seguente esempio mostra utilizzando D3 forza-diretti che nodo L
sovrappone al bordo di attacco e I
A
, e allo stesso modo, il nodo M
sovrappone al bordo di attacco e L
D
. Come possiamo prevenire questi casi?
Questo non è possibile con l'implementazione del layout di forza in D3. Dovresti implementarlo tu stesso. Nota che questo è in realtà un problema molto difficile (dal punto di vista computazionale), quindi anche se avevi un'implementazione probabilmente non vorresti eseguirla nel browser. –
@LarsKotthoff, stai dicendo, in generale, che nessun algoritmo di layout grafico noto (incluso quello implementato per D3) può risolvere questo problema in modo efficiente? – skyork
Dipende dalla tua definizione di efficienza. Trovare una soluzione (statica) a questo suona almeno NP-difficile per me. Ciò non significa che possa essere risolto rapidamente in tutti i casi specifici, ma in generale è difficile (e per i grafici di grandi dimensioni probabilmente non è possibile farlo rapidamente). Per poi cambiare quella soluzione iniziale in modo tale che i nodi si spostassero leggermente (come farebbe la simulazione) sarebbe molto facile in quanto è sufficiente eseguire solo riparazioni locali. –