通过三维网格绘制抛物线的算法

2024-06-03 01:44:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在Godot引擎中编写一个战术RPG,它使用一种类似Python的语言godotscript。我已经到了一个点,我需要绘制一个炮弹穿过太空的路径图,并找出它的路径是否被阻挡。游戏空间被构建成一个三维坐标网格,所以我认为一些画线的算法可能有用。你知道吗

对于一个线性运动的弹丸,我使用了一个三维版本的Bresenham线绘制算法来收集一个弹丸通过的点列表,然后我检查是否有任何一个点被阻挡。太好了!你知道吗

对于一个实际跟随真实弹丸运动的弹丸,我不太确定该使用什么算法。我有一个原点,一个目标点,和物体的起始速度,这应该足以产生抛物线的函数,我只是不确定画抛物线的算法。你知道吗

任何帮助都将不胜感激!你知道吗


Tags: 引擎路径算法语言游戏绘制空间太空
1条回答
网友
1楼 · 发布于 2024-06-03 01:44:01

你还没有完全生成生成抛物线的信息,但是你有足够的信息来推导它。问题是射击角度,ϴ。通常情况下,你可以从你的游戏参数。你知道吗

既然你指定了一条抛物线,我推断你忽略了空气摩擦。假设你有足够的动力达到目标,那么会有两个ϴ值击中目标;这两个值之间的任何值都会超过目标;高于或低于该间隔的任何值都会低于目标。你知道吗

我将从游戏参数中假设ϴ并在抛物线上工作。为了方便起见,我假设武器在(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

这是你的三维坐标。你知道吗

相关问题 更多 >