游戏中抛物线的计算
游戏中抛物线的计算
最近在设计一个炮打怪物的游戏动作,大炮打出子弹后子弹沿抛物线轨迹运行,同时怪物也在移动。
因此就需要预计子弹会与怪物在何处相遇。
好吧,众所周知,三点确定一抛物线,那我们就来找三个点吧。
(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 ;
右,下正值;左,上负值
下面的求解过程如上。