gpt4 book ai didi

c# - 简单的二维火箭动力学

转载 作者:太空狗 更新时间:2023-10-29 21:47:36 24 4
gpt4 key购买 nike

我目前正在使用 Farseer Physics 库在 XNA 中试验一些物理玩具,但是我的问题并不特定于 XNA 或 Farseer - 但针对任何 2D 物理库。

我想添加类似“火箭”的运动(我说类似火箭的意思是它不一定是火箭 - 它可以是飞机或水上的船或任何数量的类似物情况)对于我的 2D 场景中的某些对象。我知道如何使用运动学模拟来实现它,但我想使用动态模拟(即随时间施加力)来实现它。我有点迷失了如何实现这一点。

为了简化事情,我不需要动力学来旋转几何体,只需要影响 body 的速度。我使用的是在 Farseer 中设置为不旋转的圆形几何体,因此我只关心物体的速度。

我什至不确定最好的抽象应该是什么。从概念上讲,我有 body 当前移动的方向(单位向量)、我希望它移动的方向以及表示我希望它改变方向的速度的值,同时保持速度相对恒定(小的变化是可以接受的)。

我可以直接使用这个抽象,或者使用类似“ Helm ”值的东西来控制对象改变方向的速度(顺时针或逆时针)。

我应该对 body 施加什么样的力来模拟我正在寻找的运动?请记住,我还希望能够在飞行中调整火箭的“推力”。

编辑:在我看来,如果我错了请纠正我,你有两个力(暂时忽略主要推力):

1) 你有一个静态的“鳍”,它总是指向与 body 相同的方向。如果 body 旋转使得翅片与运动方向不对齐,空气阻力将沿翅片的长度施加力,与运动方向和翅片之间的角度成正比。

2) 你有一个“ Helm ”,它可以在指定范围内自由旋转,它与 body 的质心有一定距离(在本例中我们有一个圆)。同样,当该平面不平行于运动方向时,空气阻力会沿 Helm 的长度产生成比例的力。

换句话说,我的问题是如何根据空气阻力对尾翼和方向 Helm 计算这些成比例的力?

编辑:作为引用,这是我为测试接受的答案而编写的一些代码:

    /// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
float dc = 0.001f;
float lc = 0.025f;
float angle = MathHelper.ToRadians(45);
Vector2 vel = new Vector2(1, 0);
Vector2 pos = new Vector2(0, 0);
for (int i = 0; i < 200; i++)
{
Vector2 drag = vel * angle * dc;
Vector2 sideForce = angle * lc * vel;
//sideForce = new Vector2(sideForce.Y, -sideForce.X); // rotate 90 degrees CW
sideForce = new Vector2(-sideForce.Y, sideForce.X); // rotate 90 degrees CCW
vel = vel + (-drag) + sideForce;
pos = pos + vel;
if(i % 10 == 0)
System.Console.WriteLine("{0}\t{1}\t{2}", pos.X, pos.Y, vel.Length());
}
}

当您绘制此程序的输出时,您会看到一条漂亮的平滑圆形曲线,这正是我想要的!

最佳答案

如果您已经有了将力和质量与加速度和速度相结合的代码,那么您只需要计算您正在谈论的两个元素中的每一个的单独部分。

为简单起见,我会暂时忘记尾翼,只是说只要火箭主体与其速度成一定角度,它就会产生线性增加的侧向力和阻力。只需调整系数,直到它的外观和感觉符合您的要求。

Drag = angle*drag_coefficient*velocity + base_drag
SideForce = angle*lift_coefficent*velocity

对于方向 Helm ,产生的效果是瞬间的,但除非你的游戏绝对需要进入角动力学,否则更简单的做法是让方向 Helm 控制每次对你的火箭体角度进行固定数量的更改在你的游戏中打勾。

关于c# - 简单的二维火箭动力学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3231541/

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