作为我正在研究的项目的一部分,我需要使用4阶Runge-Kutta方法模拟恒星周围物体的轨道。对于RK4方法的每个实现,我需要将此对象的位置和速度写入.dat文件。
我的问题是,我无法解决如何在随后的时间间隔内重复整个方法,或者如何在每个步骤中写入文件而不会混淆静态和/或实例,我不会这样做。我有很多经验。
This是我能找到的最连贯的例子*虽然我知道它不适用于轨道,但我想用它作为使框架工作的基础。当一切正常时,我想我会将其内容更改为更像this的内容。
要写入.dat,我已将示例的Run()函数修改为:
public void Run()
{
while (x < target) {
y = RungeKutta.rk4(x, y, dx, dy_dt);
x += dx;
}
print("x = " + x + ", y = " + y);
DataLine = x + " " + y;
DustHandler.DataWriter();
}
其中DataLine是公共静态字符串。
然后我在主脚本中包含以下功能:
// void Update() {
// if(Input.GetButtonDown("Space")==true) {
// Transformers.Equation e = new Transformers.Equation(Transformers.Equation.x, Transformers.Equation.y, 0.0001, 1.0);
// e.Run();
// }
// }
public static void DataWriter() {
using (StreamWriter writetext = new StreamWriter("Orbit.dat"))
{
writetext.Write(Transformers.Equation.DataLine);
writetext.Close();
}
}
现在,DataWriter()工作正常,但是一旦我取消注释Update(),我就会遇到与它如何调用数据有关的所有问题。所以我进去,尝试做出任何静态的东西,但其他一切都变得混乱。我不知道是否使用实例会修复它而且我不熟悉它们的工作方式。
我有一个更明显的解决方案吗?我对此事的任何帮助表示感谢。 (顺便说一下,任何人都可以澄清示例的目标/ dy_dt实际意味着什么吗?)
*我最初在C中尝试过数字食谱,但它似乎已经过时了,而且我对C的反应比我想象的还要多。
答案 0 :(得分:0)
我通过将所有内容放在同一个脚本和类中来解决问题。它有效,但似乎是一种欺骗性的方式。