原文:
http://steamcommunity.com/sharedfiles/filedetails/?id=267214370这篇文章作者更新了好几年 算是一篇比较权威的文章, 本人闲的蛋疼看了一下它关于精准和稳定性的计算公式,[经过跟水区大神的不懈探讨] 大概理解了原作者的思路, 不敢独享, 奉献给大家, 由于本人数学已经遗忘数十年, 如果有问题, 请随时指出, 谢谢
由于为了让大家浅显易懂, 我仅仅用简单的语言总结了一下LongGuide中的弹道算法.
记得10多年前玩CS的时候, AK的弹道是一个"7"字, M4A1的弹道上一个小圆, 这都是固定的, 其实这样也挺好, 比较适合我们人类练习压枪, 但这在PayDay2中就不好使了...因为弹道都是随机的...
由于stability(稳定性)算法比较简单, 我决定先把相对复杂的Accuracy(精准)放到前面先说Accuracy(精准)
首先我们先说一下理想弹道(Ideal Trajectory), 如果我们在理想状态, 一把枪应该就是指哪儿打哪儿 大概是下面这个样子:

弹道沿着准星, r一直打到墙上(目标上). 但我们游戏不可能做成这样, 因为枪是有精准度和稳定度(后坐力)的, 为了模拟真实场景, 在这2个值的影响下, 我们希望枪的实际弹道(Actual Trajectory)会沿着b所示的路线落在墙上, 这就产生了偏移量a, 这时候, 偏移的夹角为A(单位°). 这个过程, 就是我们熟知的数学建模.
我们可以看到, 偏移量是跟随角度A来定的, 偏移的角度A越大, 偏移就越大, 所以我们在算法中只需要控制好角度A的范围就可以了.
这时候, LongGuide中引入了一个spread的概念, 也就是弹道的散射角度, 也就是我们上面提到的角度A(单位°), spread越大, 散射范围也越大.
同时, 为了控制spread值对弹道的影响不至于过大, 造成糟糕的游戏体验, PayDay2将基础spread的值限定在了0°~2°之间. 基础spread的计算公式如下:
spread = 2*(1-accuracy/100)
可以看到, 在这个公式当中, 精准值(Accuracy)可以视作一个百分比.由于精准值的范围是0~100, 所以spread的值被限制在了0°~2°之间.
具体的对照表为:

然后就是计算出实际的精准值了(Actual Accuracy).
精准值除了默认枪支上的值之外, 是受PayDay2中的天赋影响的, 比如:
MARKSMAN
BASIC: 2 points
You gain 8 weapon accuracy with all SMG, Assault Rifles and Sniper Rifles fired in single shot.
ACE: 4 points
You gain a 20% accuracy bonus while aiming down sights with all SMG, Assault Rifles and Sniper Rifles fired in single shot mode.
这个天赋+的精准值是不会显示到面板里, 只有在游戏中实战才会展现出来. 所以如何计算实际值呢?
点了maskman天赋之后, 你用单发模式, 在右键狙击模式下:
实际精准值 = (枪支精准值 + 8)* (1+20%)
然后再把实际精准值代入上面的公式, 得出基础spread值:
基础spread = 2*(1-实际精准值/100)
再*0.8, 其中0.8是狙击模式的修正值(游戏规定的),
再乘以4(Long Guide中说游戏规定的), 就得出最终的spread值.
这个spread值就是最终的实际偏转角度A(单位°).
所以在maskman天赋下:
实际spread = 基础spread*0.8*4
你可以看出, 这个实际spread是可能超过2°的. 但在基础spread的范围控制下, 也不至于让弹道偏差太大.
所以你一把60精准的武器 在点了maskman的天赋下, 实战中单发模式, 打开瞄准镜, 实际的spread = 2*(1- (60+8)*1.2/100)*0.8*4 = 1.1776,
也就是实际偏移角度为1.1776°.(这是我的算法, Long Guide中的算法我看不懂)
http://bbs.ngacn.cc/read.php?&tid=11872091