Math 运动和速度增加量,反之亦然

Math 运动和速度增加量,反之亦然,math,2d,physics,pseudocode,Math,2d,Physics,Pseudocode,除了代数1,我对数学不太了解,但是我通常可以“破解”一本数学书,并用我编写的软件使方程工作——我试图编写一个程序,让物体在屏幕上移动,具有动量、速度、质量、推力等,这似乎被称为向量数学 我将如何在笛卡尔坐标系的x&y世界和物理世界之间进行转换?例如,我如何确定循环每次迭代的增量,以便创建一个飞行对象,该对象根据简单的左-右上-下推进器的行为模拟(2d)航天器 我想弄明白的一个例子是: x=x+getnextstep(thrust, direction).x y=y+getnextstep(thr

除了代数1,我对数学不太了解,但是我通常可以“破解”一本数学书,并用我编写的软件使方程工作——我试图编写一个程序,让物体在屏幕上移动,具有动量、速度、质量、推力等,这似乎被称为向量数学

我将如何在笛卡尔坐标系的x&y世界和物理世界之间进行转换?例如,我如何确定循环每次迭代的增量,以便创建一个飞行对象,该对象根据简单的左-右上-下推进器的行为模拟(2d)航天器

我想弄明白的一个例子是:

x=x+getnextstep(thrust, direction).x
y=y+getnextstep(thrust, direction).y
所以我会输入一个量,比如0-127表示推力,0-360表示方向,然后返回增量

如果可能,请用psuedocode回答,如果您觉得足够耐心,请解释如何在笛卡尔阶跃和动量/质量/速度世界之间进行转换。

从1D开始

速度是位置随时间变化的速率。在时间t1,对象位于位置x1。从时间t1到时间t2,让它以恒定速度v滑行。它行驶的距离(x2-x1)是速度(v)乘以经过的时间(t2-t1):

(x2-x1)=v(t2-t1)
x2=x1+v(t2-t1)

或在代码中:

x+=v dt

其中dt是自上次更新所有内容以来的(模拟)时间量

加速度是速度随时间的变化率。如果加速度是常数,你必须跟踪x和v,我们得到

x+=v dt+a(dt)/22
v+=a dt

(请注意,如果不更改代数,则无法颠倒这些步骤的顺序。)

这足以模拟一个物体用一个推进器前后滑动。你控制推进器提供的“a”。如果你想在重力场中垂直运动,重力会应用它自己的加速度;只需将重力加到推进器的加速度上,这就是你的a。(根据定义,重力加速度向下,按惯例称为“g”。)

现在不要担心动量或能量,摩擦或空气阻力,或碰撞

2D:x中的运动和y中的运动基本上是独立的,因此您可以将它们视为两个1D运动模拟:{x,vx,ax}和{y,vy,ay}

如果你想要一个可以指向的推进器(例如0-360),你必须将该向量分解成x分量和y分量,然后应用上面的方法。分解像这样的向量就是三角函数;如果你不熟悉它,你就必须破解一本书(或维基百科)。这没那么复杂,但很难在这里解释


这会让你忙上一段时间。如果这太容易了,你想要更大的挑战,请看介绍性物理课文中的前几章。

通常这是以时间为基础的增量完成的,因此
x
实际上是
x(t)
y
实际上是
y(t)
。然后,您的程序以单调的方式计算
x
y
,不断增加
t
的值,例如
x(0)
,然后
x(1)
,然后
x(2)
…计算任意时间单位。好吧,我想我可以将它计时到这个设备上的1ms计时器,(这是一个非常好的决议)但我希望我们可以说一个循环=1个时间片-这样事情会以系统能够处理的速度更新,根据发生的情况,有时会小于1ms。我将采用基于时间的算法作为解决方案,我想我可以调用迭代计数器t并将其输入到算法中。你能给我介绍一个好的规范吗关于如何将向量分解成我可以参考的x&y的在线文档?