C++ 如何在不使用任何附加库的情况下以二维(Euler方法)表示重力?

C++ 如何在不使用任何附加库的情况下以二维(Euler方法)表示重力?,c++,list,class,methods,gravity,C++,List,Class,Methods,Gravity,我的最后一个问题仍然没有答案,但我认为这次我走的是一条正确的道路 我需要实现的是一个重力模型,只在二维平面上。我需要一类天体,有位置x,位置y,速度向量和质量。我希望它是这样工作的:每次我添加一个新的物体,它的质量和初始速度(如果设置)对所有其他物体都有影响,相应地影响它们的位置和速度。我被告知最好使用列表,每次创建新对象时,我都会对其他列表元素应用move()方法。是这样吗?(因评论而澄清,谢谢!) 我已经声明了类(不是所有的变量都存在) class-CBody { 受保护的: 双x; 双

我的最后一个问题仍然没有答案,但我认为这次我走的是一条正确的道路

我需要实现的是一个重力模型,只在二维平面上。我需要一类天体,有位置x,位置y,速度向量和质量。我希望它是这样工作的:每次我添加一个新的物体,它的质量和初始速度(如果设置)对所有其他物体都有影响,相应地影响它们的位置和速度。我被告知最好使用列表,每次创建新对象时,我都会对其他列表元素应用
move()
方法。是这样吗?(因评论而澄清,谢谢!)

我已经声明了类(不是所有的变量都存在)

class-CBody
{  
受保护的:
双x;
双y;
双质量;
公众:
无效移动(双倍时间,列表CBodyList);
CBody();
~CBody();
};
但我无法想出正确的方法,如何准确地使新列表对象的值改变以前列表对象的位置(通过
move()
method)并及时表示它

你有什么想法吗?基本上,我想要实现的是,每当我添加一个具有给定值的新对象时(我现在正在使用
rand()
,但稍后我可能会使用
cin>>stuff
),它就会在每个先前的天体内触发一个
move()
方法,并相应地调整它们的位置。问题是-这不是一个固定的状态,它一直在发生,如何准确地定义时间

非常感谢您的澄清


编辑:在将列表作为方法中的参数传递之前,是否需要对其进行贴花处理?上面的代码在VS2010中导致错误,说明
C2061:语法错误:标识符“列表”
IntelliSense:list不是模板
,尽管我确实包含了
。怎么了?

谢维利亚斯科维奇,谢谢你的代码块建议!降价对我来说还是有点困惑。你确定你使用的是
std
(实际上你应该使用
std::list
)。另外,
CBody
似乎也需要一个速度向量。确保
#include
列表
放在这个精确的.h文件中,而不是放在一些像stdafx.h这样的“公共include”中,并且在经典的
#ifdef/#define/#endif
守护者之后放错了(如果您使用它们的话)。有时,您可以将“公共包含”弄乱,强制它们完全不包含,或者在类定义之后包含它们。在每个.h文件的顶部和
#ifdef
监护人之后都有严格要求的include,这确保了他们永远不会被意外跳过。我不能否决投票,但我觉得这个问题很糟糕。不清楚,没有显示任何研究努力,实际上相当无用。如果你想得到家庭作业方面的帮助,你应该更清楚地知道你想要达到的目标。嗯,就是这个。我不完全理解,所以我不清楚。我需要建立一个重力模型,在这里我可以添加越来越多的物体,给出它们的位置,速度向量和质量,每次我添加一个新的天体,所有其他天体都会根据系统中的新天体使用力方程改变它们的运动。我发现最好使用列表来实现这一点,但我不知道如何进一步编写它。。。我被困在这个项目中,尽管我甚至不知道C++,我没有办法摆脱这个。如果我看起来懒惰无能,我真的很抱歉,o_weisman。
   class CBody  
    {  
    protected:  
        double x;  
        double y;  
        double mass;  
    public:  
        void move(double time, list<CBody> CBodyList);  
        CBody();  
        ~CBody();  
    };