W tym przykładzie: http://bl.ocks.org/mbostock/1747543:uniknąć kolizji między węzłami i krawędzi w D3 układ sił
... Mike pokazuje nam, jak uniknąć kolizji między węzłami tak, że żadne dwa węzły nakładają się na siebie.
Zastanawiam się, czy można uniknąć kolizji między węzłami i krawędziami, tak aby żaden węzeł nie "zakleszczył" ani nie zachodził na krawędź, chyba że jest połączony z tą krawędzią.
Poniższy przykład za pomocą D3 siły bezpośrednio wynika, że węzeł L
pokrywa się z krawędzią łączącą I
i A
, i podobnie, węzeł M
pokrywa się z krawędzią łączącą L
i D
. Jak zapobiegamy takim przypadkom?
Nie jest to możliwe w przypadku implementacji układu sił w D3. Trzeba to zaimplementować samodzielnie. Zauważ, że jest to w rzeczywistości bardzo trudny problem (obliczeniowo), więc nawet gdybyś miał implementację, prawdopodobnie nie chciałby go uruchomić w przeglądarce. –
@LarsKotthoff, czy ogólnie mówiąc, żaden znany algorytm układu wykresów (w tym ten zaimplementowany dla D3) nie może skutecznie rozwiązać tego problemu? – skyork
To zależy od twojej definicji efektywności. Znalezienie (statycznego) rozwiązania tego problemu brzmi dla mnie co najmniej NP-trudnego. Nie oznacza to, że można go rozwiązać w ogóle w określonych przypadkach, ale ogólnie jest to trudne (a na dużych wykresach prawdopodobnie nie można tego zrobić szybko). Aby następnie zmienić to początkowe rozwiązanie, tak aby węzły przesunęły się nieznacznie (jak zrobiłaby to symulacja) byłoby bardzo proste, ponieważ wystarczy wykonać lokalne naprawy. –