0

在我的 Silverlight 3 应用程序中,我显示了一棵树。一个自制的用户控件用于树节点,LineArrow 对象用于连接。初始显示树后,我希望节点按以下“物理属性”移动

  • 有一种引力,将节点拉下
  • 有一个力向量到它的父级
  • 是孩子们把它拉到他们中间

自然,我的用户控件很快就会重叠。但我不希望它们重叠。用物理术语来说,我希望它们是固体物体,并强制执行物理规则,即没有两个物体可以居住在同一个空间中。

任何建议如何解决这个问题?我不想为此使用像 farseer 这样的物理引擎,因为所描述的部分是我项目中唯一使用的物理引擎。

提前致谢,
弗兰克

4

2 回答 2

0

您可以将它们建模为“近乎实体”的对象,只需在它们重叠时在它们之间添加一个非常大的力。计算中心到中心向量,对其进行归一化,可能乘以重叠,然后将其作为力应用于每个对象。

即使您不使用完整的 Farseer 库,您仍然可以在其中找到一些有用的类,例如Vector2.

于 2010-10-05T04:07:09.670 回答
0

你的控件是方形的吗?或者你能生成边界框吗?如果是这样,您可以为每个结构创建一个 System.Windows.Rect 结构,并使用 Rect.Insersect 方法来测试交集。

于 2010-10-05T03:53:22.020 回答