//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:6541

符文:840

发表于 2016-2-22 16:16:57 |显示全部楼层
本帖最后由 Makise_Kurisu 于 2016-5-3 15:11 编辑

2.4版本,扭曲之刃的出现和罩子套的加强无疑是暴雪对法师能量旋风技能带来的最好的礼物。但是作为以前完全无人问津的技能,旋风的具体机制一直没有什么人研究,特别是最强的肆虐风暴符文。同时,组队卡风和血球辅助的兴起让旋风发挥了它可怕的威力,几乎做到100%命中率和无限的能量情况下,其的输出模型完全可以高度精确的去分析,以得到十分有用的数据。因此,本帖提供了本人对肆虐风暴的研究,以及精确的组队输出模型的分析和结论。
特别感谢shana对我写这个帖子带来的帮助,不仅对测试本身做了很多帮忙,还教会了我使用mathematica,能够高度精确地计算和分析模型。


一丶能量旋风-肆虐风暴机制研究

1.伤害机制相关的研究
     A.基础
     B.进阶
(选读)

2.相关装备机制的研究
     A.扭曲之刃
     B.郎洛思的愚行
     C.蚀刻徽记
     D.瓦泰克的训斥

3.触发机制相关的研究(系数部分未完成)

二丶组队伤害模型精确分析的结论


三丶精确分析组队输出模型的过程和计算(选读)

1.实例分析组队输出模型
     A.20帧的攻速间隔下,战斗开始后某一帧的实际风刀层数分析
     B.20帧的攻速间隔下,战斗开始后的某一帧的实际伤害分析

2.组队输出模型的进阶分析
     A.对适用于所有攻速间隔,战斗开始后某一帧的风刀层数通用公式的归纳
     B.对适用于所有攻速间隔,战斗开始后的某一帧的实际伤害通用公式的归纳

3.另一种完全等价的输出模型分析(来自Shana)
已有 9 人评分 符文 收起 理由
JustinFan + 10 喜闻乐见
杀鸡给猴看 + 10 天呀撸
爸爸无厘头 + 10 可惜只能给10分
dosageken@163.c + 10 跪拜大作,据说是基佬??
Agency + 50 + 5 网站收录
琉璃猪 + 10 你们2个每次互相感谢,真的不是基佬么?
RemusZhou + 25 + 5 感谢分享
犯人 + 10 才发现我可以评分了
grd640 + 10 圣光笼罩着你

总评分:  + 145  符文 + 10   查看全部评分

[armory]http://hero.d.163.com/hero/cn/Arcueid-51469/25967447[/armory]
[armory]http://hero.d.163.com/hero/cn/Arcueid-51469/25144761[/armory]

帖子:6541

符文:840

2#
本帖最后由 Arccueid 于 2016-8-13 22:04 编辑

一丶能量旋风-肆虐风暴机制研究

1.伤害机制相关的研究
A.基础
[1]小风和大风的有效时间持续6.4秒,大风时间与自身合体用的小风持续时间独立。
[2]风的显示伤害每48帧一跳,每风都有8跳。
[3]伤害上,两个小风合体是瞬时计算的,占用时间≤1帧。
[4]风的伤害在耗能的那一刻就开始产生了。
[5]风的伤害是近似均匀的,每秒的伤害就是总的武器伤害/6秒文字持续时间。
[6]大风的半径近似于小风半径的两倍。


B.进阶(选读)
[1]风的有效持续时间为384帧,比文字说明的360帧要长,伤害要高6.67%。
[2]风的真实伤害为12帧一个单元,一跳(12帧一跳)或者两跳(分割12帧,比如第一跳5帧,第二跳7帧)。
其中一跳的伤害=(自己本身风的总武器伤害/6秒的帧数)*(本跳的帧数)。举个例子,一个合体的大风产生了一个5帧一跳的伤害,这一跳的伤害就是(3200%/(6*60))*5。同时真实伤害分配组也是风最小判断伤害暴击的单位,但是同组的两跳是否暴击没有必然联系。意思是如果一组伤害是5帧+7帧两跳伤害分配,即使5f的伤害暴击了,7帧也不一定会暴击。因此,在没有其他随动增益效果的影响情况下,只要怪物持续受到伤害,不管大风还是小风的伤害都可以等价于每一帧均匀的。

[3]通过最小伤害分配组验证,两小风伤害上的合体是及时的,即伤害上合体时间是≤1f的。
验证过程为,一组10帧,2帧的伤害分配组内,第一跳2帧的小风伤害跳完后,第11帧的时候合体小风产生大风,12帧跳出第二条10帧的伤害经计算验证是属于大风的。动画上的合体大概会持续12-15帧左右,表现为两小风消失然后大风出现。

[4]小风的伤害半径为8码,大风的伤害半径为15码。小风合体成大风,伤害面积增加为3.52倍。
[5]风的显示伤害显示的是48帧内风造成所有伤害的总和的显示,数值为风的每秒伤害*48/60。

显示的伤害会与面板计算出来的相接近,但是因为血量变动的最小单位不同,跟真实伤害会有一定误差,且难度越小误差越小(难度越大,血量变动的最小单位越大)。

[6]消耗秘能的那一帧开始计算伤害,固定会在13帧后跳出第一个12帧一跳的伤害。
[7]因为其有效碰撞体积可能远小于其模型的体积,大部分地图模型都能将风固定不动,以至于提高甚至达到100%的命中率。
[8]风虽然是可以指向定位出现的初始位置,但是如果你人物与你鼠标指向的地点之间有障碍物,风将会出现在障碍物上,怪物也会有类似的影响。



2.相关装备机制的研究
A.扭曲之刃
[1]本剑提供的增伤是独立增伤,倍数为(1+风的数量*风刀特效%)
[2]增益层数会在消耗秘能使用风的那一帧出现,持续372帧,即6.2秒。这个也意味着每个风的最后12帧的伤害,是吃不到自己产生的增益效果的。
[3]两小风合体后,虽然动画上只有一个大风存在,但是依然会两层的增益效果。
[4]镜像使用的风无效,引导副手使用的风有效。

[5]buff 层数上限为 8 层。

B.郎洛思的愚行

[1]本护腕的特效仅作用于中小体型的非蓝黄精英怪物上。
[2]本护腕对怪物产生效果的内置CD为6秒,每个怪物内置CD独立计算,有效的范围有大半个屏幕。
[3]因为风实际模型可能非常小的原因,聚怪效果为点聚怪,无视怪物的体积,因此对范围伤的利用十分之大。但是如果采用卡风的技巧,风的聚怪效果会有所减弱,不会再聚到一点。

C.蚀刻徽记

[1]副手所使用的风伤害机制与人物主动使用的完全相同。
[2]副手使用的风没有触发系数,两个副手使用的风合体后也没有触发系数。一个副手使用的风和一个主动使用的风合体,产生的大风有系数。
[3]副手使用的风依然会触发受罚者。

D.瓦泰克的训斥
[1]特效如文字所说,将风的轨迹变成标准的直线,在卡风技巧存在的情况下,意义甚小。对单人也许有一定用处。



3.触发机制相关的研究
[1]小风的系数是一风完整19/9,相当于一风每秒系数95/288。

[2]合体后大风的系数并没有变化。
[3]风的触发不是一次性的,而是持续性的。例如一个风是可以在内置CD的限制下多次触发受罚者叠层,也可以在内置CD的限制下多次触发郎洛思的愚行。

[4]击回与风的次数无关,只跟你丢风的那一下有关。



二丶组队伤害精确分析的结论

N.B.
[1]表格数据的来源以及详细的模型的分析和计算过程都在本文的二三楼,这里只提供结论的表格。
[2]注意这个表格是精确分析组队情况下输出后的结论,并不适用与单人的情况。

[3]表格中的武器伤害已经计算了风刀的增益,所以计算真实伤害只需要考虑其他变量即可。

resize_744px.png


注:表中倒数第二列为上一版本,风刀削弱前(增加了 8 层 buff 的上限)的数据,用来参考对比。


发表于 2016-2-22 16:17:22 |显示全部楼层

帖子:6541

符文:840

3#
本帖最后由 Makise_Kurisu 于 2016-5-3 15:07 编辑

三丶精确分析组队输出模型的过程和计算(选读)

注:以下内容为 2.40 版本,风刀削弱前所写。目前 2.41 版本需要给风刀 buff 层数添加 8 层的上限,其他相同。

N.B.
组队输出模型的假设:
[1]秘能无限,这一点基本上在组队是很容易达成的。
[2]旋风命中率100%,也是在卡风和组队聚怪的基础下容易达成的条件。
[3]伤害均匀分配在每一帧,这个在怪物持续受到伤害下,是可以近似成的条件。不过随动的增益效果会对此假设有一定影响。


1.实例分析组队输出模型
A.20帧的攻速间隔下,战斗开始后某一帧的实际风刀层数分析

p1.png

[1]这是战斗开始0帧到100帧之间发生与风刀层数变化相关所有的事件,不过要注意图中小风数和大风数并不是表示风自身真实的个数,而是小风以及大风提供的风刀增益层数。如果你细心观察,可以发现,这一段时间内风刀增益层数的变化,是每20帧增加一层的,而且处于两个相邻20帧内的帧数的层数,层数状态是与前一个20帧时候的状态相同的。如果用一个帧数与风刀层数相关的函数去表示这样的现象,我们得到的是stack1(获得风刀层数)=Floor(向下取整)[1+(帧数/20)]。在第一个大风(20帧产生的)提供的2层风刀增益在397帧消失之前,某一帧风刀增益层数数量只与stack1(获得风刀层数)有关,且相等。所以在帧数<397帧的情况下,具体某一帧的风刀增益层数可以直接通过前面提供的stack1(获得风刀层数)的函数计算所得。例如在战斗开始后的第99帧,风刀的层数为Floor[1+99/20]=5层。
p22.png

[2]然后是第一个大风提供的2层风刀增益消失后,战斗开始后392帧到480帧之前,含有第二种模式的层数变化的时间轴。细心观察依然可以发现,风刀得到的层数的事件的模式还是跟之前的模式相同,每20帧获得一层,处于两次获得之间的帧数于前一次获得的状态相同,依然可以用stack1(获得风刀层数)的函数来计算。但是这时候多了另外一种风刀层数变化事件,即是392帧开始的,失去一个大风提供的风刀层数的事件。因为大风获得的风刀层数是每40帧一次,所以这个失去层数的事件也是以40帧作为一个周期循环的,而且处于两次失去层数事件之间的帧数的状态是与前一次事件的状态相同。这样的现象也可以用一个帧数与风刀层数相关的函数来表示,stack2(失去风刀层数)=2*Floor[1+((帧数-392)/40)]。有了这些基础之后,在战斗392帧之后的任意一帧的风刀层数,我们都可以通过这一帧得到的风刀层数减去这一帧失去的风刀层数来计算。所以在帧数≥392帧的时候,某一帧的风刀层数=stack1(获得风刀层数)-stack2(失去风刀层数)。例如在战斗开始后的第467帧,风刀的层数为Floor[1+(467/20)]-2*Floor[1+((467-392)/40)]=20层。
[3]至此,我们已经可以建立一组分段函数,来计算攻速间隔20帧的情况下,战斗开始后某一帧时候的风刀层数状态。函数如下:
stack(风刀层数)=Floor[1+(帧数/20)];{帧数<392帧}
stack(风刀层数)=Floor[1+(帧数/20)]-2*Floor[1+(帧数/40)];{帧数≥392帧}


B.20帧的攻速间隔下,战斗开始后的某一帧的实际伤害分析
[1]在知道战斗开始后所有帧数情况下风刀层数之后,我们就可以开始分析所有帧的实际伤害了,因为我们知道所有帧数情况下,风刀提供的增益倍数到底是多少。由特效可以知道,增益倍数可以用函数:stack(增益倍数)=1+风刀层数*风刀特效%,来表示。已知不管大风还是小风,都是384帧的有效持续时间,比自己提供的风刀增益层数持续时间的372帧要多12帧。也就是说自己风的最后12帧的伤害,是永远吃不到自己提供的风刀增益的。然后在卡风的情况下,永远吃不到自身提供风刀增益只有合体大风的最后12帧伤害。
因此,风的输出其实可以分成两个部分来计算,第一部分是能吃到自己提供风刀增益的风的伤害,这个伤害是由每一帧的大风的伤害和小风的伤害共同组成的。第二部分是不能吃到自己提供风刀增益的每个大风最后12帧的伤害,是一个有和大风一样周期的周期性伤害。我把第一部分伤害命名为同步伤害,第二部分的伤害命名为额外伤害。
[2]因为同步伤害是持续时间与风刀层数同步的大小风的伤害组合,所以每一帧的同步伤害应该由多少个大风和多少个小风组成,都可以通过风刀在这一帧的层数所判断。假如风刀的层数在这一帧的伤害为偶数,那么这一帧就有(风刀层数/2)个大风一帧的伤害。如果风刀的层数在这一帧为奇数,那么就是Floor[风刀层数/2]个大风一帧的伤害加上(风刀层数-大风个数*2)个小风一帧的伤害。知道关系后我们可以写出帧数与同步伤害相关的函数:同步伤害=stack(增益倍数)*(Floor[stack(风刀层数)/2]*大风一帧的伤害+(stack(风刀层数)-2*Floor[stack(风刀层数)/2])*小风一帧的伤害)
[3]关于额外伤害,它的情况如下图所示(X轴为时间/帧数,Y轴为武器伤害)

extraddd.png

首先,在第一个大风(在20帧产生的)提供的风刀增益在20帧+372帧=392帧后失去之前,额外伤害都是0,因为在此之前不存在符合额外伤害定义的大风伤害。第一次额外伤害会从392帧开始产生,一直到12帧后的404帧结束。从404帧到392帧的一个大风周期40帧后,多余的伤害都为0。接着然后重复12帧大风伤害,0的周期模式。因此额外伤害可以用跟帧数相关的函数来表示。额外伤害=stack(增益倍数)*大风一帧的伤害*判断函数。判断函数是一个判断某一帧应不应该有额外伤害的函数,具体形式在进阶的分析会有讨论。
[4]现在,我们已经可以计算战斗过程中所有帧数的伤害了,用函数表示为:
整体伤害=同步伤害+额外伤害。整体伤害在战斗开始后0帧到600帧的模式如下图所示(X轴为时间/帧数,Y轴为武器伤害)

dpf.png

[5]因为战斗时间越长,战斗中后面周期性的伤害占比最高,所以计算20帧间隔的平均武器伤害,只要算出392帧后任意一个40帧周期的伤害均值即可。


2.组队输出模型的进阶分析
在获得具体20帧攻速间隔,战斗中所有帧数伤害以及风刀层数的判断公式之后,通过推导,我们可以归纳出对于所有攻速间隔都适用的通用公式,下面就是具体的推导过程以及附上我真实计算所用的公式组。

A.适用于所有攻速间隔,战斗开始后某一帧的风刀层数通用公式归纳
[1]首先我们观察由20帧攻速间隔得到的具体风刀层数公式:
stack(风刀层数)=Floor[1+(帧数/20)];{帧数<392帧}
stack(风刀层数)=Floor[1+(帧数/20)]-2*Floor[1+(帧数/40)];{帧数≥392帧}

[2]可以发现分段情况是以第一次大风提供的增益层数消失为分界点,因为攻速间隔是20帧,所以第一次消失是发生在372帧(层数持续时间)+20帧(第一次大风出现的帧数)。在这372帧+20帧之前,风刀的层数都是每隔一次攻速间隔增加一次的。由此归纳可得,假设人物的攻速间隔为X,在372帧+X帧之前,风刀的层数是每X帧增加一层的,处于两次X帧之间的层数状态与前一次X帧的时候相同。用函数表示为:stackx(风刀层数)=Floor[1+(帧数/X)] ;{帧数<372帧+X帧},其中Floor[1+(帧数/X)]这个也是风刀层数的获得函数。
[3]接着我们观察20帧攻速间隔下,392帧后风刀层数的变化模式。由上面我们可以知道,风刀层数增加的模式还是每隔20帧增加一层,但是现在风刀层数已经不直接与风刀获得层数直接钩挂了,因为从392帧开始,我们就会周期性失去一个大风提供的风刀增益层数,每一帧的风刀层数应该是由获得层数和失去层数共同计算所得。因为风刀层数失去的模式是跟产生一个大风的周期相同,所以在人物攻速间隔为X的情况下,失去风刀层数是间隔2X的周期函数。从20帧得到的公式归纳,stackX(失去风刀层数)=2*Floor[1+((帧数-(372+X))/(2*X))]。所以,对应帧数≥X+372帧的帧数,风刀的层数等于这一帧风刀获得层数减去风刀失去层数。函数形式为:stackx(风刀层数)=Floor[1+(帧数/X)]-2*Floor[1+((帧数-(372+X))/(2*X))] 当{帧数≥372帧+X帧}

[4]总结,适用于所有攻速间隔,战斗开始后某一帧的风刀层数通用公式如下:
stackx(风刀层数)=Floor[1+(帧数/X)];{帧数<372帧+X帧}
stackx(风刀层数)=Floor[1+(帧数/X)]-2*Floor[1+((帧数-(372+X))/(2*X))];{帧数≥372帧+X帧}


B.适用于所有攻速间隔,战斗开始后的某一帧的实际伤害通用公式归纳
[1]知道层数的通用公式之后,我们就可以去归纳实际伤害的通用公式了。首先先建立风刀增益倍数的函数:stackx(增益倍数)=1.5+stackx*(风刀层数)*风刀特效%
[2]因为同步伤害部分是直接与风刀层数挂钩的,既然我们知道了风刀层数的通用公式,那么这么部分不需要任何调整,即可以计算所有攻速间隔下某一帧的同步伤害了。函数形式为:同步伤害x=stackx(增益倍数)*(Floor[stackx(风刀层数)/2]*大风一帧的伤害+(stackx(风刀层数)-2*Floor[stackx(风刀层数)/2])*小风一帧的伤害)
[3]额外伤害部分唯一与攻击间隔挂钩的变量,是增益倍数和判断函数。在已经明确增益倍数之后,只要解决判断函数的部分,就能得到适用于全部攻速间隔情况下的额外伤害。已知在战斗开始后第一个大风消失之前,额外伤害部分都是0。假如人物的间隔帧数为X,那就就是说在372帧+X帧之前,额外伤害都为0。所以这就是判断函数的第一部分,当帧数小于372帧+X帧之前,判断函数直接等于0。然后,第一组12帧的额外伤害会在372帧+X帧之后开始产生。12帧之后到下一个周期,也就是372+3X帧之前额外伤害都等于0。为了达到这样的判断效果,联合在372帧+X帧之前伤害等于0,我写了一组判断函数,如下:
判断=-1*帧数 ; {帧数<372+X}
判断=(帧数-
(Floor[(帧数-(372+X))/(2*X)]*(2*X)+(372+X)
)/12;{帧数≥372+X}
判断0=If[0≤判断[帧数, X] <= 1, 1, 0]

绿色部分的作用是自动判断离你输入的帧数,最近的一个372+X的周期。然后用你输入的帧数减去这个帧数,如果/12,也就是在额外伤害的12帧周期内,得到的数值就是0到1之间数字,否则就是大于1的数字,然后小于372帧+X帧情况,得到的数字全为负数。在此基础下,我们可以建立真正的判断函数,如果判断0在你输入那一帧的数值不在0和1之间,判断函数的输出就是0,反之亦然。
在这个判断函数的基础上,我们可以建立适用于所有攻速间隔,额外伤害部分的通用公式:额外伤害X=判断0*大风一帧的伤害*stackx(增益倍数)。
[4]至此,我们已经得到了适用于所有攻速间隔,计算开始战斗后某一帧的伤害的公式:伤害X=额外伤害X+同步伤害X。我们也可以分析所有攻速间隔的伤害,收益和其他的数据。

附一个我计算自己的模型的mathematica的文件


3.另一种完全等价的组队输出模型(Shana提供)

[1]风刀层数依然是使用我上面提供的通用公式计算,基本上已经是最简的表达式了。
[2]假设风的持续时间不是384帧,而是372帧,那么风刀层数公式算出来的也就是该帧存在风的个数。用另一句话说,如果把目前风刀层数公式里的372帧,改成384帧,我们就能求出在战斗开始后任意一帧时候风总体的个数。

[3]因为组队情况下两风必然合体,所以风个数/2向下取整就是大风在该帧存在的数量,然后用风整个倍数减去大风的数量,就是在该帧小风存在的数量。
[4]既然知道某一帧大小风的数量,又知道该帧风刀层数的增益,那么用该帧的伤害就等于(大风的个数*大风一帧的伤害+小风的个数*小风一帧的伤害)*该帧风刀层数的增益。
[5]经过mathematica的计算,这个模型算出来的DPS与我的模型误差等于0,所以是完全等价的输出模型。

附mathematica的文件

Arccueid,Shana模型.rar

12.78 KB, 下载次数: 1815

发表于 2016-2-22 18:21:06 |显示全部楼层

帖子:6541

符文:840

4#
本帖最后由 Arccueid 于 2016-2-23 21:23 编辑

更新用
发表于 2016-2-23 08:44:24 |显示全部楼层
[armory]http://hero.d.163.com/hero/cn/Arcueid-51469/25967447[/armory]
[armory]http://hero.d.163.com/hero/cn/Arcueid-51469/25144761[/armory]

帖子:58

符文:2

5#
好历害,虽然不大懂,还是支持。
发表于 2016-2-23 23:01:15 |显示全部楼层
头像被屏蔽

帖子:2284

符文:101

6#
靠沙发没了。。。
发表于 2016-2-23 23:05:23 |显示全部楼层
签名被屏蔽

帖子:207

符文:12

7#
前十留名,布丁布丁
发表于 2016-2-23 23:09:56 来自凯恩之角App |显示全部楼层

帖子:380

符文:54

8#
好贴留名。
发表于 2016-2-23 23:13:39 来自凯恩之角App |显示全部楼层

帖子:1032

符文:22

9#
看的好头痛     
发表于 2016-2-23 23:21:05 |显示全部楼层
[armory]http://d3.blizzard.cn/profile/BattleOoze-526816/43529521[/armory]
头像被屏蔽

帖子:17

符文:20

10#
前排留名                                          
发表于 2016-2-23 23:21:07 |显示全部楼层

帖子:27

符文:2

11#
前排看大神
发表于 2016-2-23 23:29:05 来自凯恩之角App |显示全部楼层
[armory]http://hero.d.163.com/hero/cn/%E9%BB%91%E8%89%B2%E5%A4%A9%E5%A0%82-5255/27095175[/armory]

帖子:1932

符文:48

12#
先mark,在慢慢看
发表于 2016-2-23 23:32:59 来自凯恩之角App |显示全部楼层

帖子:9

符文:2

13#
不明觉厉……海量数据啊!辛苦了!
发表于 2016-2-23 23:43:26 |显示全部楼层

帖子:1563

符文:901

14#
沙耶赛高,前排刷存在感
发表于 2016-2-23 23:48:57 |显示全部楼层

帖子:2144

符文:86

15#
楼主好专业。同爱Mathematica.
发表于 2016-2-24 00:19:29 来自凯恩之角App |显示全部楼层
您需要登录后才可以回帖 登录 | 注册网易通行证