横扫天下会 最高指挥官

 找回密码
 注册
查看: 6940|回复: 3

关于抛物线武器的弹道计算和运动控制

[复制链接]
发表于 2008-8-19 15:41 | 显示全部楼层 |阅读模式
恩。。。先别问我为什么要研究这个问题。 你可以自己去猜想,但不一定会得到制作人员的任何形式的确认。

抛物线武器弹道计算目前想了几种,其中一种是严格按照炮弹速度和重力来进行的。
已知目标平面距离R,目标竖直方向偏差Y,炮弹速度V,求炮弹发射角A。
Vxoz=cosA*V
Vy=sinA*V
假设耗时t击中目标
Vxoz*t=R
Vy*t-1/2*G*t*t=Y  其中G为重力加速度常数。

方程看似简单,但却无法求出A的值,仅在Y=0时可以用另一种方法求得A的精确值,因此,sulbon给我提了几种方案:
1.不去计算A,而把炮弹的Vxoz定为V,而Vy则需要计算出来。
具体的式子就变成了:
t=R/V
Vy*R/V-1/2*G*R/V*R/V=Y,那么Vy可以轻易的计算出来。
2.线性插值法,也就是使用多个A的值来计算分别的R,然后寻找实际的R在哪两个算出的R的值之间,然后以线性的方式估算A。这个方法的计算量会大一些,可能需要预先用其他方法估算A的大致范围,以减少不必要的计算量并提高精度。
3.俯仰角追加法,也就是先按照Y=0的情况计算A,然后再把发射位置-目标位置的俯仰角追加到A上面去。这种方法的精确度有待评估。

后来我也自己想了个方法,高度差修正法
同样是使用Y=0的特殊情况计算出A,然后再根据高度差等数据来修正A的值,如果比发射地点高,那么就使A的值变大,反之则减小,至于具体的差量计算公式这里就不罗列了。这种方法的精确度有待评估。

-------------------------
当时和sulbon讨论时,我还开玩笑是不是要增加炮弹的末端制导功能,毕竟对付移动中的单位,如果去计算提前量将十分困难(平行接近法的直接算法我还没法计算出来),不如在炮弹下降至离地一定距离时开始制导。

炮弹运动控制的大致脚本是:
  1. [OnStart]
  2. TargetDirection:=CalculateAngle(TargetPosX-Position.X,TargetPosZ-Position.Z)  //算出目标角
  3. Position.SpeedX:=...  //通过上述的计算方式之一求得初速度的三个分量
  4. Position.SpeedZ:=...
  5. Position.SpeedY:=...
  6. G:=0.196  //不同星球的G值不同
  7. Position.SetAccelerate(0,-G,0)  //设置重力加速度
  8. StartThread("GroundCollideCheck","GroundCollideCheck")
  9. StartThread("Guidance","Guidance")

  10. [GroundCollideCheck]
  11. while(1)
  12.             if(Position.Y<=Terrain.GetHeightAtPoint(Position.X,Position.Z))
  13.                         Weapon.Destroy()
  14.             end
  15.             wait(1)
  16. end

  17. [Guidance]
  18. while(1)
  19.             if(Position.SpeedY<0)
  20.                         if(Position.Y-Terrain.GetPositionAtPoint(Position.X,Position.Z)<=80)
  21.                                     if(TF.TargetCount==0)
  22.                                                 TF.ChangeTargetType(5)
  23.                                                 TF.ScanTarget()
  24.                                     else
  25.                                                 //末端制导控制代码
  26.                                                 ...
  27.                                     end
  28.                         end
  29.             end
  30.             wait(1)
  31. end

  32. [OnDestroy]
  33.             Weapon.EmitAnim(...)
  34.             Weapon.PlaySound(...)
  35.             DamageField.Create(...)
复制代码
回复

使用道具 举报

发表于 2008-8-19 16:59 | 显示全部楼层
疯了,搞这个太耗脑细胞
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-20 08:48 | 显示全部楼层
牛屎刀要是看到Starburst导弹的脚本岂不还要晕倒?
回复 支持 反对

使用道具 举报

发表于 2009-8-19 04:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|横扫天下会 最高指挥官 ( 沪ICP备11033600号-1 )

GMT+8, 2020-9-18 21:12 , Processed in 0.015495 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表