用于移动矩形的碰撞处理

时间:2010-10-04 16:10:03

标签: silverlight geometry collision

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

  • 有一个引力,将节点拉下来
  • 有一个力矢量到其父
  • 它的孩子把它拉到中间

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

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

提前致谢,
弗兰克

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

只需在它们重叠时在它们之间添加一个非常大的力,就可以将它们建模为“几乎坚固”的物体。计算中心向量,对其进行标准化,可以乘以重叠,然后将其作为力施加到每个对象上。

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