gpt4 book ai didi

silverlight - 自动图形布局 Spring 理论

转载 作者:行者123 更新时间:2023-12-04 14:53:06 25 4
gpt4 key购买 nike

我试图直观地定位实体以显示它们之间的关系。看起来对于自​​动图形布局,spring 算法将满足我的需求。我想使用 c# 在 Silverlight 中实现这一点,所以我正在寻找代码示例,或指向该理论的良好解释的链接。任何帮助表示赞赏

最佳答案

我前段时间写了一些代码来使用 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() 函数,您的图形将收敛于其最小能量状态。

关于silverlight - 自动图形布局 Spring 理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com