zoukankan      html  css  js  c++  java
  • 游戏中抛物线的计算

     

    游戏中抛物线的计算

    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 ;

    右,下正值;左,上负值

    下面的求解过程如上。

  • 相关阅读:
    可变长参数
    函数的参数
    函数
    文件操作
    字符编码
    数据类型的内置方法:集合
    数据类型的内置方法:元组
    数据类型的内置方法:字典
    数据类型内置方法:列表
    js对对象引用
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717549.html
Copyright © 2011-2022 走看看