Próbuję pozycjonować elementy wizualne, aby pokazać wzajemne relacje między nimi. Wygląda na automatyczny układ graficzny, algorytm sprężynowy odpowiada moim potrzebom. Chciałbym zaimplementować to w silverlight za pomocą C#, więc szukam próbek kodu lub linki do dobrych wyjaśnień teorii. Każda pomoc doceniona:Teoria sprężyny automatycznego układu wykresów
6
A
Odpowiedz
6
pisałem jakiś kod chwilę temu wykonać dynamiczny układy graficzne wykorzystujące C# i XNA (pełne źródło dostępne na żądanie).
Oto niektóre z najważniejszych funkcji:
public void UpdateNodes()
{
for (int i = 0; i < nodes.Count; i++)
{
Vector2 netForce = Vector2.Zero;
foreach (Node otherNode in nodes)
{
if (otherNode != nodes[i])
{
netForce += CoulombRepulsion(nodes[i], otherNode); //calculate repulsion for all nodes
if (nodes[i].links.Contains(otherNode))
{
netForce += HookeAttraction(nodes[i], otherNode); //only calc attraction for linked nodes
}
}
}
nodes[i].Velocity += netForce;
nodes[i].Velocity *= .99f;
nodes[i].Position += nodes[i].Velocity;
}
}
public Vector2 HookeAttraction(Node node1, Node node2) //ON node1 BY node2
{
Vector2 direction = Vector2.Subtract(node2.Position, node1.Position);
direction.Normalize();
return hookeConst* node2.Mass * Vector2.Distance(node1.Position, node2.Position) * direction;
}
public Vector2 GravAttraction(Node node1, Node node2) //ON node1 BY node2
{
Vector2 direction = Vector2.Subtract(node2.Position, node1.Position);
direction.Normalize();
return gravConst * node2.Mass * Vector2.DistanceSquared(node1.Position, node2.Position) * direction;
}
Wybierz dwie stałe w oparciu o jak szybko chcesz wykres zbieżne. Użyłem tych:
private const float hookeConst = .000005f;
private const float gravConst = .00000001f;
Ten kod jest dość oczywisty, ale proszę pytać, czy potrzebujesz czegoś. Zasadniczo wywołaj funkcję UpdateNodes() w pętli, a twój wykres będzie zbieżny w stanie minimalnej energii.
1
Nie użyłem żadnego z tych przykładów, ale uważam, że będą one użyteczne.
- Silverlight diagramming with spring embedder layout [demo]
- Silverlight Bag of tricks
- A Silverlight graph visualizer (updated)
Istnieje również podobna (duplikat?) Pytanie tutaj: Graph visualisation in Silverlight
Powiązane problemy
- 1. Błąd automatycznego układu
- 2. Gdzie zmienić "zainstalowany" dla ograniczenia automatycznego układu?
- 3. UITextView w UIScrollView przy użyciu automatycznego układu
- 4. Wyrównaj utworzone programowo centrum UIView z centrum widoku automatycznego układu
- 5. Jak zmienić rozmiar widoku przy użyciu automatycznego układu Xcode
- 6. Obliczanie zawartościRozmiar dla UIScrollView podczas korzystania z automatycznego układu
- 7. Widok nie aktualizuje się po automatycznej zmianie ograniczeń automatycznego układu.
- 8. Konfigurowanie ograniczeń automatycznego układu dla programowej hierarchii widoków?
- 9. Jak powiększać obrazy scenorysów za pomocą automatycznego układu?
- 10. Niestandardowy UITableViewCell z widokiem układu automatycznego i akcesoriów
- 11. Użyj układu automatycznego lub nie iOS 6.x
- 12. Ustawienia iOS zmieniają ograniczenia układu automatycznego, gdy urządzenie obraca się
- 13. Jak przewinąć UIScrollView pod obciążeniem podczas korzystania z automatycznego układu
- 14. Usuwanie wypełnienia/marginesu UILabel podczas korzystania z automatycznego układu
- 15. Jak zmienić wysokość uiview za pomocą automatycznego układu?
- 16. iOS - viewDidLayoutSubviews wywołane przed ukończeniem automatycznego układu na iOS7
- 17. Teoria prawdopodobieństwa i planowanie projektu
- 18. Teoria Node.js - Node.js, Express.js, Passport.js
- 19. Teoria projektowania baz danych na wielkiej płytce
- 20. Teoria (i terminologia) za kontrolą źródła
- 21. Konfiguracja kwestią bezpieczeństwa sprężyny
- 22. Przesuwka zakresu żądania sprężyny
- 23. testowanie sprężyny jonowej
- 24. sprężyny i DB_CLOSE_ON_EXIT
- 25. Ustawienie zmiennej profilu sprężyny
- 26. Dane sprężyny CrudRepository istnieje
- 27. jQuery wykresów
- 28. Jakie opcje są dostępne dla układu kierowanych lub nieukierunkowanych wykresów w .NET?
- 29. Jak usunąć górne i dolne wypełnienie UIButton, gdy jest on tworzony przy użyciu automatycznego układu?
- 30. Ograniczenie automatycznego układu: jak zrobić widok zachowując stosunek szerokości do wysokości po zmianie rozmiaru?
Tylko uwaga: że "węzły [i] .Velocity * = .99f;" jest stałą tłumienia, co ułatwia zbieganie się wykresu. Zmniejsz tę wartość, aby zmniejszyć "sprężystość". –
Chciałbym źródło ... [email protected] –
na pewno, tutaj jest (jako spakowany projekt): http://staff.arson-media.com/preetum/uploads/springForceV0.zip Zauważ, że napisałem ten kod * całkiem * jakiś czas temu, więc istnieją niepotrzebnie zaciemnione regiony (jak region oznaczony "mouseStuff" w pętli aktualizacji). Mimo to wszystkie ważne elementy są obecne i funkcjonalne. (Jest trochę interakcji z myszą) –