gpt4 book ai didi

c# - 在C#中实现牛顿万有引力定律

转载 作者:行者123 更新时间:2023-11-30 13:57:17 25 4
gpt4 key购买 nike

我正在尝试创建一个(糟糕的)行星运动模拟,使用牛顿万有引力定律计算速度,然后将所有速度相加以计算最终运动方向。然而,当尝试实现该公式时,我的行星只是不动,当在控制台上输出计算出的速度 float 时,它显示 +infinity。这是我使用的算法:

    private void calculateVelocity()
{
List<Vector2> Velocities = new List<Vector2>();
foreach (Planet p in Game1.Planets)
{


Vector2 dir = Vector2.Subtract(p.Position, p.Position);
float radius = dir.Length();
float power = G * ((Mass * p.Mass) / radius);
float acceleration = power / Mass;
float velocity = acceleration * deltaTime * 0.1f;
//Console.WriteLine(velocity) -- Outputs random numbers and often +infinity !!!
dir.Normalize();
dir = Vector2.Multiply(Position, velocity);
Velocities.Add(dir);

}
foreach (Vector2 v in Velocities)
{
Vector2.Add(Velocity, v);
}
}

希望你能帮我解决这个问题。提前致谢,丹尼尔

编辑

这是(希望)工作的版本,以备不时之需。

private void calculateVelocity()
{
List<Vector2> Velocities = new List<Vector2>();
foreach (Planet p in Game1.Planets)
{
if(p.Identifier != this.Identifier)
{
Vector2 dir = Vector2.Subtract(p.Position, Position);
float radius = dir.Length();
float force = G * ((Mass * p.Mass) / ((float)Math.Pow(radius,2));
float acceleration = force / Mass;
float velocity = acceleration * deltaTime * 0.1f;
//Console.WriteLine(velocity) -- Outputs random numbers and often +infinity !!!
dir.Normalize();
dir = Vector2.Multiply(dir, velocity);
Velocities.Add(dir);
}
}
foreach (Vector2 v in Velocities)
{
Vector2.Add(Velocity, v);
}
}

最佳答案

你有一个零长度方向:

Vector2 dir = Vector2.Subtract(p.Position, p.Position);

应该是

Vector2 dir = Vector2.Subtract(p.Position, Position);

或者只是

Vector2 dir = p.Position - Position;

关于c# - 在C#中实现牛顿万有引力定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com