2014-10-09 23 views
8

poniżej jest normalną funkcją przykładem kleszcza:Co to jest parametr `e` przekazywany do funkcji oddzwaniania force d3.js?

function tick(e) { 
    nodes 
     .each(cluster(10 * e.alpha * e.alpha)); 
} 

kto może mi powiedzieć definicję „e”? Jakie ma właściwości? Nie mogę znaleźć żadnego opisu "e" i jakie jest znaczenie e.alpha. Tak, użyłem google, ale bez wyników.


Dzięki za pomoc udzieloną poniżej.

mam kopiowania kodu, które używają

var force = d3.layout.force() 
     .nodes(nodes) 
     .size([width, height]) 
     .charge(-70) 
     .gravity(0.1) 
     .on("tick", tick) 
     .start(); 

więc to tylko sprawa się domyślić. Jestem nowicjuszem w d3, skim z force.layout API nie dało mi żadnej wskazówki. Dziękuję za cenny czas!

+1

Szukaj 'e.alpha' w [tym poście] (http://flowingdata.com/2012/08/02/how-to-make-an-interactive-network- wyobrażanie sobie/). – FernOfTheAndes

+0

Podaj więcej informacji o tym, gdzie znalazłeś tę funkcję. Przedstawienie samej funkcji nie mówi nic o naturze parametru, który zostanie do niej przekazany. Zasadniczo zgadłem w mojej odpowiedzi, ale pytanie powinno być zamknięte, ponieważ nie zawiera wystarczających informacji do zdiagnozowania problemu. – AmeliaBR

Odpowiedz

14

Bez pełnego kontekstu swojego „normalnego” funkcjonowania, to jest trochę zgadywać, ale tu idzie:

tick jest stosowany w wielu kontekstach wewnątrz D3. Inskrypcja alpha sugeruje, że jest to force layout tick function, która jest wywoływana przez obiekt rozkładu sił na tikku, w którym to przypadku e byłby obiektem zdarzenia tick.

Nie ma zbyt wiele dokumentacji na temat zdarzenia "tick", ponieważ większość przykładów go nie używa. Jeśli skontrolować source code, widać

// A rudimentary force layout using Gauss-Seidel. 
d3.layout.force = function() {      //line 11 
    var force = {}, 
     event = d3.dispatch("start", "tick", "end"); 
    /* ... */ 
    force.tick = function() {      //line 58 
     // simulated annealing, basically 
     if ((alpha *= .99) < .005) { 
      event.end({type: "end", alpha: alpha = 0}); 
      return true; 
     } 
     /* code to implement default force layout adjustments */ 
     event.tick({type: "tick", alpha: alpha}); //line 128 
    }; 
    /* ... */ 
    return d3.rebind(force, event, "on");   //line 305 
}; 

Innymi słowy, wydarzenie kleszcz jest jednym z trzech rodzajów zdarzenia niestandardowego utworzonych w kodzie źródłowym d3 przy użyciu procesu d3.dispatch. Szczególnie zdarzenie tick jest wywoływane na końcu wewnętrznej funkcji tick i zawiera tylko jedną niestandardową właściwość: bieżący parametr alpha w układzie sił. Aby te zdarzenia faktycznie były realizowane w dowolnym miejscu, metodaobiektu rozsyłającego zdarzenia jest ustawiona na obiekt rozkładu sił, aby użytkownik mógł zarejestrować funkcje detektora dla zdarzeń niestandardowych.

Jeśli wszystko to jest zbyt dużo D3 wewnętrzne dla ciebie, tylko skupić się na tych szczegółach:

  • e jest obiektem zwyczaj wydarzenie przekazywane do funkcji kleszcza za każdym razem jest on nazywany
  • e.alpha jest obecna wartość alfa układ siła, która rozpoczyna się przez standardowe 0,1 i zostaje zmniejszona (zgodnie z parametrem friction) w każdym kleszcza, aż spadnie poniżej 0,005, a układ zawiesza:

    Wewnętrznie układ wykorzystuje parametr chłodzenia alpha, który steruje temperaturą układu: gdy symulacja fizyczna zbiega się w stabilnym układzie, temperatura spada, powodując, że węzły poruszają się wolniej. Ostatecznie alpha spada poniżej progu i symulacja zatrzymuje się całkowicie, uwalniając procesor i unikając wyczerpania baterii. (From the API wiki for force.start)

+0

Przepraszam, ale muszę ci podziękować za więcej niż przegłosowanie. Obecnie jest to, afaik, jedyna publiczna dokumentacja tego, co jest przekazywane do sparametryzowanej funkcji 'on (" tick "i' tego, co oznacza komponent 'alpha' (inny niż kod źródłowy d3)' e.alpha' jest używany w kilku przykładach (np. Google "d3 multiple force layouts") bez żadnych wyjaśnień, więc chciałbym dać więcej niż jeden głos na tę odpowiedź. (Nie, że potrzebujesz rep). Niestety, ta odpowiedź nie pojawia się łatwo w wyszukiwaniach Google, ale nie jest trudno znaleźć go w wyszukiwarce SO – Mars

+1

Dzięki @Mars, a ja mam zrobić coś, co powinienem był zrobić w październiku: I [zaktualizowałem wiki interfejsu API D3] (https://github.com/mbostock/d3/wiki/Force-Layout#on), aby zawrzeć te informacje, więc powinno być łatwiej znaleźć w przyszłości! – AmeliaBR

+0

Świetnie. (Wciąż uważam, że twoja odpowiedź jest tutaj bardzo pomocna. Nie rozumiem jeszcze całej wysyłki, warto zobaczyć wyjaśnienie, które wyraźnie odwołuje się do definicji "kleszczy", która ma parametr.) – Mars