游戏中抛物线的计算 |
您所在的位置:网站首页 › 弹弹堂弹道公式 › 游戏中抛物线的计算 |
最近在设计一个炮打怪物的游戏动作,大炮打出子弹后子弹沿抛物线轨迹运行,同时怪物也在移动。 因此就需要预计子弹会与怪物在何处相遇。 好吧,众所周知,三点确定一抛物线,那我们就来找三个点吧。 (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 ;
右,下正值;左,上负值 下面的求解过程如上。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |