我试图在两点之间绘制轨迹路径。我所知道的是有问题的两点以及它们之间的距离。我希望能够计算的是达到终点所需的速度和角度。
我还希望能够考虑一些重力和风力,以便路径/轨迹不那么“完美”。它用于电脑游戏。
谢谢F。
答案 0 :(得分:3)
可以使用SUVAT equations of motion描述整个身体状况,因为任何时候的加速都是不变的。
以下说明假设了解基本代数和向量数学。如果你不熟悉它,我强烈建议你在尝试编写你提出的那种游戏之前先阅读它。它还假设你正在处理2D,但是如果你处理的是大部分同样适用的3D,因为它都是矢量形式 - 你最终只能求解立方而不是二次,这可能是最好用的数值求解器。
(注意:矢量用粗体表示。)
基本上,你要首先制定位移方程式(矢量形式):
r = 你 t +( a t ^ 2)/ 2
r是相对于起始位置的位移,u是初始速度,a是加速度(始终为常数)。 t当然是时间。
a取决于系统中存在的力。在重力和风的一般情况下:
a = F_w / m - g j
其中 i
是x方向的单位向量, j
是y方向的单位向量。 g
是重力加速度(地球上9.81 ms ^ -2)。 F_w
是由风引起的力矢量(这个术语在没有风的情况下消失) - 为了简单起见,我们假设这是恒定的。 m
是弹丸的质量。
然后你可以简单地将 a
的等式替换为 r
的等式,并且你的等式为3变量( r
, u
, t
)。接下来,将 r
的单向量方程扩展为两个标量方程(对于x和y位移),并使用替换来消除t
(这里的数学可能会有点棘手) )。您应该留下一个二次方程式,只有 r
和 u
作为自由变量。
现在,您要解决r = [target position] - [start position]
的等式。如果您为初始速度选择一定幅度 u
(即速度),那么您可以将u的x和y分量写为U cos(a)
和U sin(a)
分别为U
是初始速度和初始角度。这可以重新排列,通过一点三角法,你可以最终解决角度a,给你发射速度!
上述大多数描述应首先在纸上进行。然后,只需编写一个函数来解决quadratic formula并应用一些反三角函数来得到结果。
P.S。对不起这篇文章中的所有数学/物理,但这是不可避免的!无论如何,OP似乎要求更多关于物理而非计算方面,所以这就是我所提供的。希望这对OP和其他人都有用。
答案 1 :(得分:2)
这本书:
现代外部弹道学:对称弹丸的发射和飞行动力学 ISBN-13:978-0764307201
是弹道学的现代权威。为了准确,您需要更正:
http://www.dexadine.com/mccoy.html
如果您需要免费且权威性较低的东西,可以在books.google.com上找到Mann博士的1909年经典子弹从粉末到目标的航班。
-kmarsh
PS在游戏中糟糕的弹道学是我的一个特别的诱惑,特别是“射击平坦到无限”的弹道模型。答案 2 :(得分:2)
正如人们所提到的那样,虽然确定点之间的角度相对容易,但确定风和重力影响击球的方式更加困难。
风和重力都是加速力量,尽管它们的行为有所不同。
重力更容易,因为无论物体如何,它都具有恒定的方向(向下)和幅度。 (假设你没有以极其高的速度拍摄东西)。要计算重力如何影响物体的速度,只需花费自上次更新物体速度以来的时间,将其乘以重力因子,并将其添加到当前的速度矢量中。
作为一个简单的例子,让我们想象一个在x,y,z方向上以(3,4,7)的速度移动的物体,其中z与重力平行。您确定您的重力值为-.3您已准备好计算新的速度。当您检查时,您发现自上次计算以来已经过了10个时间单位(无论您的时间单位是什么......也许是滴答声或其他内容)。你把你的时间单位(10)乘以你的引力(-.3),得到-3。你将它添加到你的Z,你的新速度是(3,4,4)。而已。 (这已经非常简化,但这应该让你开始。)
风如果你想做得对,有点不同。如果你想以一种简单易行的方式做到这一点,你可以使它像重力一样......在特定方向上的恒定力量。但更现实的方法是使力取决于您当前的速度矢量。简单地说:如果你正在风中移动,它不应该给你任何力量。在这种情况下,您只需将力的大小计算为其方向与您自己的方向之间的差异。
一个简单的例子可能是你在(3,0,0)移动,风在(5,0,0)移动,我们可以给风强度.5。 (你还必须乘以经过的时间...为了这个例子,为了保持简单,我们将时间经过因子保留为1)你计算向量的差异并乘以你的时差(1),并发现差异是(2,0,0)。然后,您将该矢量乘以风力强度.5,然后您会发现速度变化为(1,0,0)。将其添加到您之前的速度,然后得到(4,0,0)......所以风已经略微加速了物体。如果你等待另一个单一时间单位,你将得到(1,0,0)的差值乘以你的强度.5,所以你的最终速度将是(4.5,0,0)。正如你所看到的,当你在速度上接近它时,风提供的力更小。)这有点整洁,但对于游戏弹道可能过于复杂。
答案 3 :(得分:0)
角度很容易,atan2(pB.x-pA.x,pB.y-pA.y)。速度矢量应为(pB-pA)*速度。并且为了增加重力/风(重力只是具有负y分量的风),在每个模拟刻度处将(缩放的)风向量添加到您的速度(您基本上将其添加为加速度)。
答案 4 :(得分:0)
只是一个链接,抱歉:http://www.gamedev.net/reference/articles/article694.asp。
在gamedev上有很多关于游戏物理的论文。看看。
(顺便说一句:风只会给物体增加一些速度。困难的部分是重力。)