Tôi đang cố định vị trí các thực thể trực quan để hiển thị mối quan hệ của chúng với nhau. Có vẻ như để bố trí biểu đồ tự động, thuật toán mùa xuân sẽ phù hợp với nhu cầu của tôi. Tôi muốn thực hiện điều này trong Silverlight bằng cách sử dụng C#, vì vậy tôi đang tìm các mẫu mã, hoặc các liên kết để giải thích tốt về lý thuyết. Bất kỳ trợ giúp nào được đánh giá caoBố cục sơ đồ bố cục tự động lý thuyết xuân
6
A
Trả lời
6
tôi đã viết một số mã lúc trước để thực hiện động sơ đồ bố trí bằng cách sử dụng C# và XNA (nguồn đầy đủ có sẵn theo yêu cầu).
Dưới đây là một số chức năng quan trọng:
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;
}
Chọn hai hằng số dựa vào tốc độ bạn muốn đồ thị để hội tụ. Tôi đã sử dụng chúng:
private const float hookeConst = .000005f;
private const float gravConst = .00000001f;
Mã đó khá tự giải thích, nhưng vui lòng hỏi xem bạn có cần gì không. Về cơ bản, gọi hàm UpdateNodes() trong một vòng lặp, và đồ thị của bạn sẽ hội tụ về trạng thái năng lượng tối thiểu của nó.
1
Tôi chưa sử dụng bất kỳ ví dụ nào trong số này nhưng tôi tin rằng chúng sẽ được sử dụng cho bạn.
- Silverlight diagramming with spring embedder layout [demo]
- Silverlight Bag of tricks
- A Silverlight graph visualizer (updated)
Ngoài ra còn có một tương tự (lặp lại?) Câu hỏi ở đây: Graph visualisation in Silverlight
Các vấn đề liên quan
- 1. Bố cục tự động UILabels
- 2. Bố cục sơ đồ Venn với d3.js
- 3. Bố cục động với bố cục đường ray
- 4. Bố cục lưới Vs. Bố cục bảng
- 5. Bố cục tự động là gì?
- 6. Bố cục tự động bằng initWithFrame?
- 7. thêm bố cục trong bố cục khác
- 8. Tự động thay đổi bố cục hàng của một ListView
- 9. thay thế bố cục trên QWidget bằng bố cục khác
- 10. Sử dụng agility.js để bố cục trang và bố cục
- 11. Tràn với bố cục bố cục tuyệt đối/tương đối
- 12. bố cục đất và bố cục xoay màn hình android
- 13. Android: Cách tự động bao gồm Bố cục XML?
- 14. Thêm bố cục vào bố cục khác trong Qt [C++]
- 15. Bố cục CSS Tricky
- 16. Hạn chế bố cục trên lớp bố cục không chuẩn
- 17. Bố cục bố cục sai trong cửa sổ bật lên
- 18. Thuật toán bố cục đồ thị Java
- 19. Chiều cao động của UIWebView với bố cục tự động
- 20. Eclipse IDE - Bố cục đồ họa và bố cục XML của Android Cạnh nhau
- 21. Bố cục Android S3 và bố cục Galaxy Nexus
- 22. Bố cục bố cục trong ứng dụng Android là gì?
- 23. Bố cục bố cục bàn phím ảo trên màn hình
- 24. Trình quản lý bố cục jQuery
- 25. Bố cục Tự động với UINavigationBar và UIBarButtonItem
- 26. Bố cục thay đổi Android động
- 27. Bố cục "buộc đẩy lùi" tự động trong Cocoa
- 28. Custom UICollectionViewCell Bố cục Tự động NSInternalInconsistencyException error
- 29. Tự động ẩn bố cục trình phát media trong android
- 30. Cách tự động đặt thông số bố cục trong Android?
Chỉ cần lưu ý: "nút [i] .Velocity * = .99f;" là một hằng số giảm chấn để làm cho biểu đồ của bạn hội tụ dễ dàng hơn. Giảm giá trị đó cho ít "springyness". –
Tôi muốn nguồn ... [email protected] –
chắc chắn, ở đây là (như một dự án nén): http://staff.arson-media.com/preetum/uploads/springForceV0.zip Lưu ý rằng tôi đã viết mã này * khá * một thời gian trước đây, vì vậy có một số vùng không cần thiết bị xáo trộn (như vùng được đánh dấu "mouseStuff" trong vòng lặp cập nhật). Tuy nhiên, tất cả các thành phần quan trọng đều có mặt và hoạt động. (Có một số tương tác với con chuột, là tốt) –