2011-10-07 12 views
5

Quando si crea un grafico JS di Arbor banale con un singolo nodo, il nodo si agita intorno a tutto il punto e non è possibile aggiungere ulteriori nodi.Errore di nodo singolo in Arbor.JS

Il problema è anche riportato qui da un altro utente:

https://github.com/samizdatco/arbor/issues/12

Gradirei il vostro aiuto con una correzione/soluzione

+0

Da questo mi sono spostato nella libreria d3.js [collegamento] (http://mbostock.github.com/d3/), che è un'alternativa superba. –

+0

Il problema sembra apparire anche in altri casi quando si hanno più nodi. Per esempio ho avuto circa 30 nodi connessi a un nodo centrale e quel nodo centrale ha iniziato a rimbalzare pure – user579674

risposta

2

Utilizzando la libreria d3.js invece di Arbor ha risolto il mio problema :-)

+0

puoi ridefinire il ridisegno? come puoi con pergolato? Devo essere in grado di utilizzare gli elementi DOM per i miei nodi, anziché le forme renderizzate. = \ – NullVoxPopuli

2

Non è proprio una correzione, ma ho contare il numero di nodi e se meno in poi impostare l'attrito per 1,0

if (nodeCount == 1) { 
    //Stop single nodes bouncing all over the place 
    sys.parameters({ friction: '1.0' }); 
} 
+0

Come contate esattamente i nodi? Ho cercato di contarli ma non riesco a capire come farlo al di fuori del file arbor.js poiché sembra che non possa accedere alla matrice di nodi. – user579674

1

Un'altra opzione è quella di sostituire il file physics.js con uno this. Ha diverse correzioni per compensare i problemi relativi alla presenza di un singolo nodo (inclusi i problemi che aggiungono il secondo).

0

provare questo

if (nodeCount == 1) { 
 
      sys.parameters({ repulsion: 10, gravity: false, dt: 0.035 }) 
 
     } 
 
     else if (nodeCount > 1 && nodeCount < 30) { 
 
      sys.parameters({ repulsion: 1000, gravity: false, dt: 0.35 }) 
 
     } 
 
     else { 
 
      sys.parameters({ friction: .1, stiffness: 0.1, repulsion: 1, gravity: false, dt: 0.035 }) 
 
     }

2

Usiamo una soluzione soluzione per questo. Probabilmente è più un hack che una soluzione completa, ma è facile da implementare e funziona bene nella maggior parte dei casi.

Quello che facciamo è che determiniamo il numero di particelle nel sistema ogni volta che una particella viene aggiunta o rimossa. Se questo conteggio è uguale a uno, aggiungiamo una nuova particella nel sistema, con il suo colore impostato sul colore di sfondo della tela. Poiché il colore del nodo è uguale al suo sfondo, non è visibile.

Quindi in nessun punto c'è un singolo nodo nel grafico. Ogni volta che ciò accade a causa di un'aggiunta o eliminazione, aggiungiamo questo nodo di bilanciamento nascosto. Si può dare un'occhiata al nostro sito Web per vedere un esempio dal vivo per quanto sopra: http://www.graphthinker.com. Man mano che si aggiungono nodi, è possibile vedere che il grafico continua a essere reattivo anche quando ha un solo nodo (visibile).

Questo nodo di bilanciamento nascosto può essere rimosso quando non è più necessario, ad esempio quando viene aggiunto un altro nodo o quando viene rimosso l'unico nodo visibile.

Problemi correlati