我真的不知道数学超出代数1,但是我通常可以“破解”数学书并使方程式在我写的软件中工作 - 我正在尝试编写一个程序,其中的对象在屏幕上移动,动量,速度,质量,推力等似乎被称为矢量数学。
我如何在笛卡尔坐标x&的世界之间进行转换?你到物理世界?例如,如何根据简单的左右上下推进器创建一个模拟(2d)航天器的飞行物体来确定循环每次迭代的增量?
我想弄清楚的一个例子:
x=x+getnextstep(thrust, direction).x
y=y+getnextstep(thrust, direction).y
所以我会输入一个数量,比如0-127表示推力,0-360作为方向,然后返回增加的数量
如果可能的话,请回答psuedocode,如果你有足够的耐心,请解释笛卡尔逐步和动量/质量/速度世界之间的转换方式。
答案 0 :(得分:0)
从1D开始。
速度是位置随时间的变化率。在时间t 1 ,对象位于x 1 的位置。从时间t 1 到时间t 2 ,让它以恒定速度v滑行。它行进的距离(x 2 -x 1 )是速度(v)乘以经过的时间(t 2 -t 1 子>):
(x 2 -x 1 )= v(t 2 -t 1 )
x 2 = x 1 + v(t 2 -t 1 )
或代码:
x + = v dt
其中dt是自您上次更新所有内容以来的(模拟)时间量。
加速度是速度随时间的变化率。如果加速度是恒定的,你必须跟踪x和v,我们得到
x + = v dt + a(dt)/ 2 2
v + = a dt
(请注意,您不能颠倒这些步骤的顺序,而不是在不更改代数的情况下。)
这足以模拟一个物体用单个推进器来回滑动。您可以控制由推进器提供的“a”。如果你想在重力场中进行垂直运动,重力会应用自己的加速度;只是增加推力器的加速度,这就是你的a。 (根据定义,重力加速度指向下,按惯例,它被称为“g”。)
现在不要担心动量或能量。或摩擦或空气阻力。或碰撞。
2D:x中的运动和y中的运动基本上是独立的,因此您可以将它们视为两个一维运动模拟:{x,v x , x }和{y,v y , y }。
如果你想要一个推进器,你可以指向(例如0-360),你必须将该矢量分解为x分量和y分量,然后应用上述内容。打破这样的矢量是三角函数;如果你不熟悉它,你将不得不破解一本书(或维基百科)。它并不复杂,但这里很难解释。
这应该会让你忙一阵子。如果它太简单并且您想要更大的挑战,请查看介绍性物理文本中的前几章。