弹道算法原理

这几天研究射击游戏的武器子弹轨迹的算法。找了《战地1》来参考。下面以《战地1》来说明。

 

 

看图:《战地1》武器的全属性

 

M1918突击步枪

 

 

两幅图连接着看。

 

 

武器属性分为4个部分:

General (一般)

Reload (填弹)

Recoil (后坐力)

Spread (散布)

 

 

各部分属性详解

General

Damage points

23
20.84
20
17.37
16.67
14.89
14.29
13.5

伤害曲线图上面点

Dropoff points

6.0
11.0
12.0
21.0
22.0
29.0
30.0
37.0

下坠曲线图上面的点

Firerate

900 RPM

每分钟射速

Firerate (Burst)

900 RPM

每分钟射速(点射)

Num. of pellets

1

弹丸数

Muzzle velocity

380 m/s

枪口速度

Bullet drop

12 m/s²

子弹下坠

Drag coeff

0.0025

阻力系数

Mag size

25

弹匣容量

Projectile

9x19mm_Gilsenti

子弹模型

Deploy time*

0.65 s

切换武器后的准备时间

Hor. dispersion*

0

水平分布(霰弹枪)

Ver. dispersion*

0

垂直分布(霰弹枪)

 

 

 

 

 

Reload

Reload (Empty)

2.8s

填弹时间(无剩余)

Reload (Left)

2.1s

填弹时间(有剩余)

Reload threshold

0.83x

填弹域时间 (超过此时间而中断,再次填弹时不用从新开始填弹 )

Pre-reload delay

N/As

填弹前延时

Post-reload delay

N/As

填弹后延时

Single-bullet reload

N/As

单发填弹

Bridge delay *

N/As

第一次单发填弹的延时

Strip clip size

N/A

弹夹容量

Strip clip reload

N/A

弹夹填弹

 

 

 

 

 

Recoil

Recoil Up

0.42

向上后坐力

Recoil Left

0.4

向左后坐力

Recoil Right

0.4

向右后坐力

Recoil decrease

16

后坐力回复速度

1st shot multiplier

2

第一发子弹后坐力因子

 

 

 

 

Spread (散布)

Spread increase *

0.045

散布增量

1st shot mul (ADS)

6

第一发子弹因子(瞄准)

1st shot mul (HIP)

6

第一发子弹因子(腰射)

Spread decrease

4.05

散布减少(瞄准)

Spread decrease

4.05

散布减少(腰射)

ADS - Not moving

0.3

瞄准不移动

ADS - Moving

0.5

瞄准移动

HIP, Standing, Not moving

1

腰射,战立,不移动

HIP, Crouching, Not moving

1

腰射,蹲伏,不移动

HIP, Prone, Not moving

1

腰射,俯卧,不移动

HIP, Standing, Moving

1.5

腰射,站立,移动

HIP, Crouching, Moving

1

腰射,蹲伏,移动

HIP, Prone, Moving

1

腰射,俯卧,移动

 

 

下面解释一下后坐力和散布值对弹道的影响。

 

后坐力:影响武器的朝向角度。每次射击都会施加影响。停止射击回复。主意武器左右方向的后坐力相同,则子弹分布于靠近中轴线。而武器没有向下的后坐力,只有向上的后坐力,所以就有压枪的说法。压枪可以减少后坐力带来的影响。

 

散布:影响射击准确度。子弹从枪口飞出,会随机分布在散布值的角度内。并不会笔直命中枪口朝向的目标点。

 

 

注意:子弹的散布值,在角色各种姿态下,数值不同。因此有些武器适合腰射,有些适合瞄准,等等。

注意:第一发子弹,有些武器的后坐力和散布值,有惩罚倍率。因此不适合点射。

注意:《战地1》可以设定武器的后坐力方向。这个只是将原本向上的后坐力更改了一个方向,以方便用户的压枪习惯,并不会对后坐力大小有影响。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高尔夫弹道补偿算法是一种用于修正高尔夫球飞行轨迹的算法,它可以根据球的发射角度、速度和风速等因素来计算出修正值,从而使球的飞行轨迹更加准确。下面是一种基于 Matlab 实现的高尔夫弹道补偿算法: 1. 首先定义球的初始速度、发射角度和风速等参数。 ``` V0 = 70; % 球的初始速度,单位:m/s theta = 10; % 球的发射角度,单位:度 W = [0, 5, 10]; % 风速,单位:m/s ``` 2. 计算球的初始速度在 x、y、z 三个方向上的分量。 ``` Vx0 = V0 * cosd(theta); % 球的初始速度在 x 方向上的分量 Vy0 = V0 * sind(theta); % 球的初始速度在 y 方向上的分量 Vz0 = 0; % 球的初始速度在 z 方向上的分量 ``` 3. 定义球的质量、重力加速度和空气阻力系数等参数。 ``` m = 0.0459; % 球的质量,单位:kg g = 9.8; % 重力加速度,单位:m/s^2 Cd = 0.25; % 空气阻力系数 ``` 4. 定义计算轨迹的时间间隔和总时间。 ``` dt = 0.01; % 时间间隔,单位:s T = 10; % 总时间,单位:s ``` 5. 计算球的飞行轨迹。 ``` for i = 1:length(W) Vx = Vx0; % 球的速度在 x 方向上的分量 Vy = Vy0; % 球的速度在 y 方向上的分量 Vz = Vz0; % 球的速度在 z 方向上的分量 x = 0; % 球的初始位置在 x 轴上的坐标 y = 0; % 球的初始位置在 y 轴上的坐标 z = 0; % 球的初始位置在 z 轴上的坐标 ax = 0; % 球的加速度在 x 方向上的分量 ay = 0; % 球的加速度在 y 方向上的分量 az = 0; % 球的加速度在 z 方向上的分量 t = 0; % 时间 while t < T % 计算球的加速度 V = sqrt(Vx^2 + Vy^2 + Vz^2); % 球的速度 ax = -0.5 * Cd * 0.0459 * V^2 / m + W(i); % 球的加速度在 x 方向上的分量 ay = -0.5 * Cd * 0.0459 * V^2 / m; % 球的加速度在 y 方向上的分量 az = -g; % 球的加速度在 z 方向上的分量 % 计算球的速度和位置 Vx = Vx + ax * dt; % 球的速度在 x 方向上的分量 Vy = Vy + ay * dt; % 球的速度在 y 方向上的分量 Vz = Vz + az * dt; % 球的速度在 z 方向上的分量 x = x + Vx * dt; % 球的位置在 x 轴上的坐标 y = y + Vy * dt; % 球的位置在 y 轴上的坐标 z = z + Vz * dt; % 球的位置在 z 轴上的坐标 % 更新时间 t = t + dt; end % 绘制轨迹 plot(x, y); hold on; end % 添加标签 xlabel('X(m)'); ylabel('Y(m)'); title('高尔夫弹道补偿算法'); legend('无风', '5m/s风', '10m/s风'); ``` 以上就是一个简单的高尔夫弹道补偿算法的实现,可以通过改变参数来模拟不同的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值