游戏中抛物线的计算

 

游戏中抛物线的计算

515人阅读 评论(1) 收藏 举报

最近在设计一个炮打怪物的游戏动作,大炮打出子弹后子弹沿抛物线轨迹运行,同时怪物也在移动。

因此就需要预计子弹会与怪物在何处相遇。

好吧,众所周知,三点确定一抛物线,那我们就来找三个点吧。

(x1,y1),子弹发射点;

(x2,y2),目标所在点;

第三个点该如何确定呢?

其实这里我们需要再给出一个条件。

一般游戏效果会有这几种要求:

--第一种--

抛物线的高度为定值:

如图,有几个点很重要,a(x1,y1) ,子弹的发射点;c(x2,y2), 目标的当前位置;b现在还不知道,也就是子弹的射击点

另外需要知道目标的移动速度v2,抛物线可以达到的高度h;

我们设从发射点到达抛物线最高点需要时间t1,从最高点到达点射击点时间t2;

t1 = sqrt(2*h/g);[注:g为重力加速度] ;t2 = sqrt( 2*(h + y2-y1)/g );

子弹出射速度分解为vx 和 vy;

vx = (x2 - x1)/(t1 + t2) - v2;

设抛物线方程: y = a*pow(x - b,2) + c; ---这里使用顶点式,稍后解释为什么。

首先,假设抛物线顶点在y轴上,这样b = 0;x1 = -vx*t1;c = y1 + h; [屏幕显示的默认坐标系中y的正向是朝下的,要注意]

好了,把已知量代入,求得a = h/pow(vx*t1,2);

然后平移抛物线,使a点与发射点重合就ok了; (变量设重名了,原谅我吧 - -|||)

--第二种--

发射角固定:

这种跟上一种的思路一样,也是求出 t1 , t2,

但是高度不知道就不能一步步求解,需要建立方程组了;

设抛物线高度为h,

---h = pow(vy,2)/(2*g) ,

| t1 = sqrt(2*h/g);

| t2 = sqrt( 2*(h + y2-y1)/g );

| vx= vy/tan(alpha);

---vx = (x2 - x1)/(t1 + t2) - v2;

=> (vx + v2*tan(alpha))*(vx+sqrt( pow(vx,2) + 2*g*(y2 - y1) )) = tan(alpha)*g*(x2 - x1);

这个方程式解起来有难度,感谢baidu知道为我求解的小朋友^_^

设 i = v2*tan(alpha);

j = g*(x2 - x1);

k = tan(alpha)*2*g*(y2 -y1)

vx 1= (- i*j - i*k + sqrt( i^2*j^2 + 2*j^3 + j^2*k ) )/2*j + k ;

vx 2= (- i*j - i*k - sqrt( i^2*j^2 + 2*j^3 + j^2*k ) )/2*j + k ;

右,下正值;左,上负值

下面的求解过程如上。

原文地址:https://www.cnblogs.com/xiayong123/p/3717547.html