1

我想要做的是使用 Visual Studio 在 Visual Basic 中模拟弹丸运动。本质上,类似这样的东西,但没有空气阻力或质量。

无论如何,我这样做的方式是使用 PictureBox 并每隔一段时间用间隔 1 的计时器绘制图像(例如一个圆圈),其 x 和 y 属性是由公式计算的变量。

我想知道我可以使用哪些公式来分配给 x 和 y,以便我得到像示例中那样的运动。在维基百科和其他网站的帮助下,我尝试了很多东西,但似乎无法成功。谢谢!

4

4 回答 4

3

这是最小化宝贵时钟周期的绝对简单示例:

// Initialization
x = 0; // x position
y = 0; // y position
xi = 0.1; // x incremental value (velocity)
yi = 0.1; // y incremental value (velocity)

// Rendering loop
x += xi;
y += yi;
yi -= 0.01; // decrement by arbitrary value to simulate gravity

这个想法是使用增量变量 xi 和 yi 并对它们执行所有的力。您可以调整数字以获得所需的效果。如果您想更进一步,您可以通过使用乘数在每次迭代中调整这些增量变量来轻松应用摩擦或空气阻力。

这是我在粒子引擎等中多次使用的基本方法。由于您没有对任何三角函数进行任何调用,因此它具有速度极快的优势,并且可以很好地扩展到大型粒子引擎。

更新:

这里有一个使用地球引力公式中的数字的方法示例: http ://www.forums.evilmana.com/game-programming-theory/euler-vs-verlet-vs-rk4-physics/?wap2

即使使用 -9.8 值和时间步长变量,它仍然是简单的代码。我的代码只是优化到最简单的。

于 2010-02-08T23:11:10.017 回答
1

假设发射速度V,发射角a弧度,重力g,时间t:

x = V * cos(a) * t + g * t * t / 2
y = V * sin(a) * t - g * t * t / 2

背景信息在这里。

于 2010-02-08T23:05:03.063 回答
0

设置 X = 自发射以来的总时间

Y = -0.5 * A * X*X + V * X + InitialHeight

A = 期望的加速度。地球的加速度(即重力)约为。9.8 米/秒平方。

V = 你在向上方向的初始速度

InitialHeight 在您的示例中为零,但如果您愿意,您可以从更高的起点开始。

编辑:

另一篇文章指出

x = V * cos(a) * t + g * t * t / 2

y = V * sin(a) * t - g * t * t / 2

这本质上是相同的公式,但省略了可选的 + InitialHeight 参数。

我的陈述“向上方向的速度”与他的公式中的 V(总速度)* sin(a) 相同。

为简单起见,我将 X 等同于 t(时间),但 x = V * cos(a) 可让您将时间映射到物理距离。在我的简化中,我假设您并不真正关心 X 轴上的确切单位(这可能是也可能不是有效的假设)。

于 2010-02-08T23:04:48.307 回答
0

您可以查看首先包含在 MS-DOS 5中的“大猩猩”游戏的 QuickBasic源代码。它考虑了重力,以完全按照您描述的方式为投掷香蕉的运动设置动画。

据我所知,Basic 语言的数学部分从那时起就没有改变过。

于 2010-02-09T17:58:19.723 回答