看了M蛋的直播,M蛋的这项技术很有趣。
所以作为火焰数学家,我来建模。
考虑到直播中很多东西看的不是太清楚。所以有很多东西是基于我录制视频后慢放得到的结果。
这是斐波那契螺旋线吗
我倾向于认为这是阿基米德螺线
阿基米德螺线(亦称等速螺线),得名于公元前三世纪希腊数学家阿基米德。阿基米德螺线是一个点匀速离开一个固定点的同时又以固定的角速度绕该固定点转动而产生的轨迹。
有位朋友画出了轨迹图。
by [口可口可]
根据GIF草画一张图,球均是以黄线方向出去的,最后形成红线样式。
再引用一组更加形象的图。
by [zhentai]
我想象了一下,不知道是不是这样子的,修改了下,原来球出去是直线。
原地不动的脑补。
再搬运一位朋友的MATLAB动图,可以让大家对此问题有更加形象的认识:
[M鸡蛋阿基米德螺旋线之Matlab动图版]
+R by [糖灬小熊]
提供改进版:
当我们认为爆炸球出现的间隔是均匀的,每次球转的角度是均匀的,并且球出来后走直线,就可以认为球的轨迹是阿基米德螺线。
要是这几个不满足,那阿三设计师就真厉害了。
通过慢动作回放,我得出了以下的假设:
• 爆炸球每0.5s出现一个
• 爆炸球一次出现六个,下次出现的爆炸球会逆时针旋转10度
在直播中,我听到了以下的结论
• 人物移动速度是7码/秒
• 一共放60个球
考虑到我们考虑的是球的路径,所以不需要知道球的移动速度。
通过我的法师在副本里的实际测量,该区域是80码x80码的方形区域,中间大圆的半径为20码。
MATLAB绘图
我们首先考虑跑直线的情形。
写了一段Matlab代码,大半夜的脑子不是很清楚,写的稍稍有点乱。直接更改有注释的两行就可以更改初始位置和初始方向(弧度制)。欢迎大家捉虫:
velocity = 7;
clear
hold on
zz = 0:0.001:2*pi;
m = 0:0.01:100;
for alpha = 1:6
for k = 0:9
%跑直线
qidian = [20,20];%起点
al0 = 0;%初始角度
angle = k*2*pi/36+pi/3*alpha+al0;
pos1 = qidian +[3.5*k*cos(al0),3.5*k*sin(al0)];
plot(pos1(1)+cos(zz),pos1(2)+sin(zz),'color','blue')
x = pos1(1) + (cos(angle) *m);
y = pos1(2) +( sin(angle) * m);
plot(x,y,'color','black')
end
end
axis([0 80 0 80]);
plot(40+20*cos(zz),40+20*sin(zz),'color','red')
plot(40+3*cos(zz),40+3*sin(zz),'color','green')
考虑最简单的情形
建立笛卡尔坐标系。设队员从(0,0)点出发,沿x轴向右出发。(其他跑直线的结论都是该情况的旋转平移)
可以得到下图
从(18,20)出发的结果
跑中间大圆无论顺逆时针结果(还需进一步验证):
其他跑大圆图片:
结论
对于本场战斗而言,我们可以选择的跑法应该只有跑大圆和跑直线——跑椭圆虽然或许可以得到好结果但是怎么可能跑出椭圆。
建议采用如下方法:
起点(18,20)左右,如下图:
经过一天的讨论,大家又的出了一些新的内容。
镜像靠里一些会更容易多球。不知道为啥图传不上来就不上新图了。
更新:补充了第一组球出在正左正右情况下的跑法,这种情况更加好跑——只要保证你左边的球恰打不到镜像,然后跑切线即可。
一些有意义的补充说明
之前只写了一个大概的框架,许多朋友给出了有意义的问题和见解,摘录如下:
移动速度会影响结果吗?
by [橘子皮肉]
楼主你少计算了一个变量,人物初始移动速度是7码/秒,实际战斗中人物的移速会变,比如DH的移速受精通加成,火法的灼烧奥法的弹幕熊T的豹奔等等无数个技能会影响这个参数,所以要把这个变量添加进讨论范围建模实际战斗中才有参考的价值,否则就是鸡蛋数学家的XJB讨论。
我们做速度为100%,110%,120%情况下的结果,分别用黑色、红色、绿色表示。
可以发现,速度越快,我们的空隙越大,团队容错越高。(但是跑太快会撞到自己的球)
有朋友给出了示意图,将三个镜像都画了出来 ...
by [dywfjyie2489]
一个更加“解析化”的做法,我们可以寻找切线的包络面
[火焰数学家来了][M鸡蛋]关于P1走位的计算
有两位朋友给出了曲线跑法(1)
by [武大狼儿]
以反的角速度跑个弧线不就轻松避开了么?
close all
hold on
zz = 0:0.001:2*pi;
m = 0:0.01:100;
for k = 0:9
for alpha = 1:6
%%%%%%%%%%%%%%%%
al0 = -k*2*pi/36;
%跑直线
qidian = [35,20];%起点
% al0 = 0;%初始角度
angle = k*2*pi/36+pi/3*alpha+al0;
pos1 = qidian +[3.5*k*cos(al0),3.5*k*sin(al0)];
plot(pos1(1)+cos(zz),pos1(2)+sin(zz),'color','blue')
x = pos1(1) + (cos(angle) *m);
y = pos1(2) + (sin(angle) *m);
plot(x,y,'color','black')
end
end
axis([0 80 0 80]);
plot(40+20*cos(zz),40+20*sin(..
有朋友给出了示意图,将三个镜像都画了出来 ...
by [酒醒簾幕低垂]
楼主,这是我给细爷发的图,我的计算和对慢动作回放的判断和你一模一样,我推荐的跑法是小圆弧,最后的效果也和你大圆弧的跑线图一致。
所以我认为我俩的理解应该都是正确的。细爷觉得有道理,发给了团友,对此我很欣慰;断大否决了这个跑法,我也能理解,毕竟弧线跑位太过吃力和苛刻。
还有很多朋友给出了形形色色的曲线跑法,不再一一引用。曲线跑法的设计思路可以查看本文中的第一个折叠。我个人还是担心跑曲线太难了,也许是我操作水平太渣了。为了说明曲线好不好最好还是画个动图说明,实在是没精力做那么多事情了。而且最好再做一些加随机误差扰动后的动图,看看结果怎么样。
我没有给出这种方法主要是担心曲线跑位的微小误差会带来球位置的大偏差。毕竟按照固定角度跑步就真的不是alpha而是alpha go了。。。但是这种方法不见得不管用,需要对“曲线跑位的微小误差会带来球位置的大偏差”是否成立进行更细致的验证。54楼的朋友在68楼提出这个跑法只要角度是偏大而不是偏小就没有关系。
根据大家的回复,目前有四点存疑:
• 我可能真的火焰数学家了,跑大圆的模拟出了问题,需要修改。我自己重做了几张草图,还需要各位大佬的后续验证。
• 第一组球的方向——这个问题好解决,把我给出的直线跑法反过来(从右往左)就是“第一组球有两个是正左正右”(注:考虑到球的旋转方向,可能要把整张图旋转对称下),正着跑(从左往右)就是“第一组球有两个是正前正后”
by [ocean198900]
等速螺线无疑。说斐波那契螺线的太扯淡了,用多点的运动构建斐波那契螺线这种曲率不连续的曲线无疑十分麻烦,BLZ不会这么折腾自己的。这就是h宰相的那个球的模型,直接拿来用了,不过h宰相那个更加困难,黄绿两种速度还不同。
说人物移动速度影响球速度的也可以洗洗睡了,wow的物理建模里面没有多惯性系这个系统,不同速度的系统要不就是不同位面,要不就是接触判定,不存在速度叠加这个惯性概念。
不过其实这些都毫无意义,建模其实没有什么用,因为第一次出球方向的不确定和人员跑动的不稳定性,算出优化路线本身就没有意义,因为..
• 概括的说,我们把阿基米德螺线和一个匀速直线运动叠加。那么螺线必然会出现“稀疏”的部分和“稠密”的部分。我们希望“稀疏”的部分穿大团。——这确实可以看作是多普勒效应
• 如果人物转向,对球有影响吗?有朋友举出了像扎昆这样的例子。我暂时按没有影响处理。
• 昨晚犯二了没看见这个区域还有一个半径40码的大圆。
• 不过按照有些朋友的评论,跑大圆的结果一定不好,因为“好”的跑法应该是向场外偏转。