首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物理模拟:设计思想

物理模拟:设计思想
EN

Software Engineering用户
提问于 2022-11-30 01:21:10
回答 2查看 133关注 0票数 1

我是一名应用物理专业的学生,目前正在模拟蛋白质中多个质子的磁相互作用。

我只有很少的编程经验,几乎没有使用OOP的经验,有很多信息需要我处理。特别是在如何设计我的模型的方式是灵活的,可以很容易地扩展以后。

到目前为止,我一直在编写我的类图。我的方法是创建一个physObject类,实现不同的behaviour-interfaces。因此,在我的例子中,所有Protons都将实现MagneticBaheviour接口。

我尝试让我的设计尽可能松耦合,使其可重用。因此,稍后有人可能会添加一个GravitationalBehaviour来模拟物理物体的引力行为。

这是我现在的班级图的草图。然而,我对一些连接并不满意,我也不知道如何在uml图表中可视化我的复杂系统。也就是说,为了计算ActingBField,我需要有关到其他physObjects的距离的信息。而且,每次(即physObject的位置)发生变化时,必须再次在每个现有的physObject上计算ActingBField

此外,在physObject上具有MagneticBehaviour的作用磁场将导致BlochEquations的调用,从而导致Magnetization的改变,从而导致对ActingBField的新计算。你明白了吧。

因此,我的系统包含了许多递归模式,当特定对象的值发生变化时,对象需要能够自动传递所需的信息。

我的第一种方法是使用观察者模式,使我的physObject成为一个Observable,而每个Behaviour-interface都是一个Observer。然而,我也读到了事件/案例/状态驱动编程的文章。这听起来也符合我的问题,但我不知道哪一个申请一个模拟。我想我可以为一些方法定义一个调用条件,我甚至不知道如何可视化这个设计。

最后,但同样重要的是,到目前为止,我所做的只是关注模拟的物理模型。然而,为了使这个模拟可以使用,我想我需要找到一种方法来将这个模型连接到某种用户,即设置模拟的时间周期或选择要查看的数据。

我将如何使用uml图将其可视化?我需要考虑或完全忘记什么概念?

我很高兴在正确的方向上提供任何帮助,我也很感谢到目前为止任何能够做到这一点的人。谢谢你阅读^^

EN

回答 2

Software Engineering用户

发布于 2022-11-30 07:22:15

在进入OO模型的兔子洞之前,我会考虑第一原则。

最佳方法

在我看来,你有一个房间,一个房间里的物品列表,以及与每个物品相关的一些值(包括一个3D位置,所以有三个数字,还有某种磁化值)。你可能不需要代表房间--从物品清单开始。

现在,对于少量的项目,您可以很容易地画在黑板上。你想模拟什么?是在相互磁力作用下,每个物体在太空中的运动吗?如果我们假设在时间上向前移动1秒,你将如何在纸面上计算由于磁力引起的位置变化?把算法写下来。

计算机现在可以编程为更多的项目,更多的时间步骤,比你希望的手工做这些计算。

OOP

上的其他点

面向对象编程的主要工业应用,实际上被发现是有效的,是允许由远不止一个人(通常是不同公司的数千人)组成的团队编写交互的软件组件。

二三十年前,对于OOP应该如何建模“真实世界”,有很多更广泛的炒作。在现实中,这种方法通常只会导致现实世界的简单模型,这些模型根本不是真实的,但也(自相矛盾地)导致极其复杂和集成不良的程序。

你试图用计算机做的不是模拟物理世界,而是自动化一个计算过程,产生一组数字,在不同的时刻代表物理世界的状态。

一旦你计算出了数字,它们就可以由计算机绘制和动画,就像在纸上生成一个图表一样,从计算数字开始,以及如何从绘制每一个图表开始。

票数 3
EN

Software Engineering用户

发布于 2023-01-13 14:51:57

因此,我的问题已经过去一段时间了,从那以后,我调整了我的设计。所以我想出的是:

粒子的性质现在更清晰了,所有的计算都将在我的PhysicsSystems中进行。PhysicsWorld将跟踪所有PhysicsSystems,并在仿真的每一时间步骤运行一次update()-method。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/442542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档