我目前正在godot引擎中编程一个战术rpg,它使用一种类似python的语言godotscript。我已经到了一个地步,我需要绘制一个弹丸穿过太空的路径图,看看它的路径是否受阻。游戏空间被构造成一个三维坐标网格,所以我认为某种画线算法可能会起作用。
对于直线运动的弹丸,我使用三维版本的Bresenham线绘制算法来收集弹丸通过的点的列表,然后检查是否有任何点被阻挡很好用!
对于一个实际跟随真实弹丸运动的弹丸,我不太确定该使用什么算法我有一个原点,一个目标点,物体的起始速度,应该足以生成抛物线的函数,我只是不确定画抛物线的算法。
任何帮助都将不胜感激!
最佳答案
你还没有完全生成信息来生成抛物线,但是你有足够的信息来推导它。问题是射击角度一般来说,这是你的游戏参数给你的。
既然你指定了抛物线,我推断你忽略了空气摩擦。假设你有足够的动力达到目标,那么会有两个值_击中目标;这两个值之间的任何值都会超调;高于或低于该间隔的任何值都将不足。
我将从游戏参数中假设_,并在抛物线上工作。为了方便起见,我假设武器在(0,0,0)处,目标在(x,y,0)处从这里开始,数学比较简单。
地面角度(即指南针方向)由φ = arctan(y/x)
给出。我们将把弹丸的速度分解成x,y和h(垂直或高度)分量。
原始水平分量为s = v*sin(ϴ)
(s=地面速度)与原点的距离是时间的线性函数:地面速度是恒定的。
垂直位置是射弹高度的标准公式:
h = 1/2 * g * t^2 + v0 * t + h0
v0 = initial upward velocity = cos(ϴ) * starting velocity.
h0 = initial height (0 in our case?)
t = time
g = gravitational force, -9.8 m / sec^2
分解地面速度,我们得到每一个作为时间的函数:
x = s * sin(ϴ) * sin(φ) * t
y = s * sin(ϴ) * cos(φ) * t
h = -4.9 * t^2 + cos(ϴ)*v * t
这是你的三维坐标。
关于python - 通过3D网格绘制抛物线的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57876538/