我要做的是使用Visual Studio在Visual Basic中模拟射弹运动。基本上,像this,但没有空气阻力或质量。
无论如何,我这样做的方式是使用PictureBox并使用间隔1的计时器以(例如,圆圈)绘制图像,其x和y属性是由公式计算的变量。
我想知道我可以用什么公式来分配给x和y,这样我得到的动作就像示例中的那个。在维基百科和其他网站的帮助下,我尝试了很多东西,但似乎无法实现。谢谢!
答案 0 :(得分: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值和timestep变量,它仍然是简单的代码。我的代码只是最简单的优化。
答案 1 :(得分:1)
假设发射速度为V,弧度的发射角度,重力g,时间t:
x = V * cos(a)* t + g * t * t / 2
y = V * sin(a)* t - g * t * t / 2
背景信息is here.
答案 2 :(得分: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轴上的单位(这可能是也可能不是一个有效的假设)。
答案 3 :(得分:0)
您可以查看QuickBasic source code以获取MS-DOS 5中首次包含的“gorillas”游戏。它考虑了重力,以完全按照您的方式为抛出的香蕉的动作制作动画描述。
据我所知,自那时起基础语言的数学部分没有改变。