[英]How Do I Compute Orbits Using Runge-Kutta in C# Over Multiple Timesteps?
作為我正在進行的項目的一部分,我需要使用4階Runge-Kutta方法模擬物體圍繞恆星的軌道。 對於RK4方法的每個實現,我都需要將此對象的位置和速度寫入.dat文件。
我的問題是,我無法弄清楚如何在隨后的時間間隔內重復整個方法,或者如何在每個步驟中將文件寫入文件,而又不會將內容與我沒有太多經驗的靜態和/或實例混淆。
這是我能找到的最連貫的示例*,盡管我知道它不是針對軌道的,但我想以此為基礎來使框架正常工作。 當一切正常時,我想我會將其內容更改為更多類似這樣的內容 。
為了寫入.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()的注釋,我就會遇到與它如何調用數據有關的各種問題。 所以我進去,嘗試使它成為靜態的,但是其他所有事情都會變成麻煩。 我不知道使用實例代替是否可以解決該問題,我完全不了解它們的工作方式。
我在這里有一個更明顯的解決方案嗎? 謝謝您對此事的幫助。 (順便說一句,有人可以澄清示例的target / dy_dt實際意味着什么嗎?)
*我最初使用C嘗試了數值食譜,但似乎已經過時了,而且我對C的了解比我想象的還要生銹。
我通過將所有內容放在相同的腳本和類中來解決了這個問題。 它有效,但似乎是一種欺騙的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.