c# - 球对球碰撞 - 物体粘在一起

标签 c# wpf

我在使用 C# 时遇到问题,我正在尝试制作一个碰撞模拟器,用户可以在其中输入质量、速度和方向的值,但是当它们发生碰撞时,它们会粘在一起而不会弹开。我认为这是因为程序认为物体的动量为零。

最佳答案

虽然您应该从学习如何调试小程序开始——请参阅对原始问题的评论——您在这里的问题不仅仅是您不知道错误在哪里。这里的问题是这个类设计得很糟糕,设计缺陷使它极易出错。

具体的设计缺陷是大量的类状态冗余。您遇到的错误是数据不一致,这是冗余数据的经典问题。当数据冗余时,对其中一个的任何更新都会使其与其余数据不一致。然后您必须编写代码来修复不一致,而该代码很容易出错。

为了消除冗余,弄清楚系统中什么是基本,然后只跟踪那些属性。按需计算其余部分,而不是存储它们。

在您的示例中,您有速度、速度、方向、质量、动量和位置。你对它们的表示方式不一致:位置是一个向量,但表示为单独的坐标,速度和动量表示为向量。动量对于质量和速度是多余的。速度和方向对于速度来说是多余的。所以任何时候你改变速度,你都必须改变速度、方向和动量;不这样做会使系统不一致,因此会出现错误。

只是不要那样做。为质量、速度和位置设置读写属性。将速度、方向和动量设置为只读属性。只读属性根据基本原理计算它们的值。

或者,如果您愿意,可以将质量、速度、方向和位置作为基础,并根据它们计算速度和动量。任何。没关系。重要的是您没有存储可能不一致的信息。

类似地,如果您将力和加速度作为属性添加到该系统,则从另一个计算其中一个。添加力作为矢量属性,然后根据力和质量计算加速度。

关于c# - 球对球碰撞 - 物体粘在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363643/

相关文章:

c# - 如何从 WPF 中的数据网格中的组合框获取数据?

wpf - ItemsControl 与 SharedSizeGroup 和拉伸(stretch)

c# - 如何对 <TEntity> 未知动态通用列表进行排序?

c# - 有没有办法将引用的 MonoBehaviours 序列化为 JSON?

c# - 如何向 Canvas 元素添加多条折线?

wpf - 在WPF Richtextbox中获取TextPointer的XY坐标

c# - Linq To Sql 搜索多列和多个词

c# - 该构建还原了 NuGet 包。再次构建项目以将这些包包含在构建中

c# - Dictionary Keys 有字数限制吗?

c# - 已进行选择时卡住列表框项目的选择