我試圖將實體視覺化以顯示彼此之間的關係。它看起來像自動圖形佈局,彈簧算法將適合我的需要。我想用c#在Silverlight中實現它,所以我正在尋找代碼示例,或鏈接到理論的很好的解釋。任何幫助讚賞自動圖形佈局彈簧理論
6
A
回答
6
我寫了一些代碼,前一段時間來執行動態使用C#和XNA的圖形佈局(可根據要求提供完整源代碼)。
下面是一些關鍵功能:
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;
}
選擇根據你想如何快速的圖形收斂兩個常量。我使用這些:
private const float hookeConst = .000005f;
private const float gravConst = .00000001f;
該代碼是不言自明的,但隨時問你是否需要任何東西。基本上,在一個循環中調用UpdateNodes()函數,並且您的圖形將收斂於其最小能量狀態。
1
我沒有使用任何這些例子,但我相信他們會對你有用。
- Silverlight diagramming with spring embedder layout [demo]
- Silverlight Bag of tricks
- A Silverlight graph visualizer (updated)
也有類似的(重複?)的問題在這裏:Graph visualisation in Silverlight
相關問題
- 1. 彈簧自動佈線
- 2. 彈簧自動佈線類
- 3. 彈簧自動裝配不從非彈簧管理類工作
- 4. 處理iPad視圖的自動佈局
- 5. 彈簧佈局中的水平線
- 6. 沒有瓷磚的彈簧mvc佈局
- 7. 使用彈簧佈局對於手GUI
- 8. 彈簧速度佈局標題值
- 9. 彈簧 - 佈線
- 10. 自定義評論佈局
- 11. intellij中彈簧xml的圖形視圖
- 12. 自動佈局拉伸圖像,自動佈局,IOS
- 13. 形式語言理論 - 自動機
- 14. 控制器在形式處理彈簧
- 15. 處理多個形式在彈簧MVC
- 16. UMLDesigner - 圖自動佈局
- 17. GraphX/PyGraphviz中有向圖的NetworkX樣式彈簧模型佈局
- 18. Android圖形佈局
- 19. Android TV佈局變得自動變形
- 20. Xcode自動佈局:最適合方形
- 21. 彈性佈局的自動縮放圖像
- 22. 圖形理論:分割圖形
- 23. 彈簧自定義自動裝配
- 24. Angularjs發佈彈簧啓動電話
- 25. 滾動圓形佈局集合視圖
- 26. 彈簧自動裝配Struts動作類
- 27. mvc彈簧啓動和自動配置
- 28. 自動啓動彈簧應用程序
- 29. 彈簧集成 - 控制自動啓動
- 30. 微軟服務與彈簧啓動和發佈管理
請注意:「節點[i] .Velocity * = .99f;」是一個讓你的圖更容易聚合的衰減常數。爲了減少「彈性」而減少該值。 – 2009-08-25 04:43:41
我想來源... [email protected] – 2009-08-25 04:46:42
當然,這是(作爲一個壓縮項目):http://staff.arson-media.com/preetum/uploads/springForceV0.zip 請注意,我很早以前就編寫了這個代碼,所以有一些不必要的混淆區域(如更新循環中標記爲「mouseStuff」的區域)。儘管如此,所有重要的組成部分都是存在的並且是功能性的。 (還有一些與鼠標的互動性) – 2009-08-25 05:22:40