魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

編程語言 魔獸世界 遊戲 蘋果牛看遊戲 2017-07-16

前排感謝大家的支持~國服加油!~大家遊戲愉快

目前已知的信息:

阿爾法之前嘗試的是直線跑位,佶天鴻嘗試的是120度圓心角的弧線跑位

幾家公會目前都採用了遠離大團的弧線/近直線跑位,起點距離大團約30碼

阿爾法已經靠此 及應變 成功 艱難苟活 度過P1進入P2

分析看來,這種跑法是為了在產生一塊安全區方便大團集中站位/集火/刷血的同時,方便炮圈人員迅速歸位/轉火。

因此,在幾家公會已經達成共識的情況下,本文不再作路線規劃的建議,只會嘗試作一些對他們這種選擇的解釋和補充

重要的問題:

圈每輪轉動10度這個條件,其轉動方向是以人物前進方向(動座標系)為參考還是以場地本身(靜座標系)為參考的?

前者意味著可以通過轉身控制球的發射方向,後者意味著人物只是提供落點。

PS.個人更傾向於後者,因為目前沒有任何一個BOSS的技能會依據人物前進方向而改變,更多的只是判定人物位置;

而唯一個最接近雞蛋技能的就是扎昆的種子,該技能同樣不會被面向影響。

目前看來,實際使用的是靜座標系,所以想通過轉身把圈放成直線的可以歇啦。~

前排編輯1:

目前看到的一個 沒什麼用的 結論:(感謝#108樓幫助,進一步思考了這個問題)

安全區的方位=球10度旋轉軸(垂直屏幕向外)叉乘人物移動方向。矢量叉乘喲~

應要求加入了改進版帶軌跡的圖片,更加直觀~

靜止放

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

直線放(橫向)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

直線放(縱向)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

#96樓朋友提出,弧線跑位時起點位置會影響安全區,並且自己做了個插件,有需要可以移步

下兩圖是剛開始隨意設置數值的弧線放圈效果,更詳細的分析可以見“前排編輯2”

120度圓心角放(-180度起點)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

120度圓心角放(-150度起點)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

前排編輯2:

做個簡單的計算:人物移動速度是7碼每秒,圈0.5秒一輪,如果想使球的每輪路徑均為某個圓的切線(效果圖在下面),使得安全區成為一個標準圓

則需要使3.5碼弧對應10度的角度,那麼距安全區中心的半徑就需要R=3.5/(10/180*pi)約等於20碼,人物的速度限制了這一距離

那麼代碼代入R=20的條件,圈的起始角為0度,從-150度開始跑,共轉過90度,效果如下:

90度圓心角放(-150度起點,半徑20)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

嗯,看似很美好,然而實際上,安全區只是一個10碼半徑的圓。

而我們再來看看起始位置如果差了20度的效果(從-130起跑):

90度圓心角放(-130度起點,半徑20)

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

可以看到,安全區的空間被大大壓縮了,這還是建立在已知起始角是0度的情況,如果起始角不是0度,或者半徑20碼控制得不嚴格,都會對結果造成很大的影響(詳情可見後文圖)。

那麼現在看來,形成你所說的理想圓形安全區需要的條件如下:

一、知道圈的起始角

二、根據起始角定下的嚴格跑圈路線

三、嚴格執行跑圈的路線

然後最終只能得到一個10碼半徑的安全區。

所以這麼看來,幾家公會的放棄這種看似最規整的跑法,選擇離大團30碼 參雜靈性跑位 是很有道理的

原文:

之前帖子的鏈接:[火焰數學家的建模與總結]

作為一個 閒的沒事的 聖光數學家,昨晚也觀摩了下M雞蛋的炫酷技能,引用早上看到一篇帖子的模型,用Matlab畫了個動圖版本,可以隨意感受一下

下圖是靜止放完圈的效果,其輪廓形成阿基米德螺線:

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

下圖是正常速度直線移動放圈的效果:

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

圈的移動速度和人的移動速度都是可以調的,有興趣的胖友可以找我要下源代碼。

本來想試試3個圈一起跑結果計算量太大直接卡死了。。

另外還作了一個人物移動速度爆表的放圈效果, 化身追風少年

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

因為初始每60度會有一輪圈,每輪圈轉動10度,共轉動9次,從這幾個圖可以得到初步結論:

  • 如果靜止不動放圈,場地上的每一個位置都會至少有一個球的軌跡經過(除非相鄰兩線間距過大產生縫隙,實際很難出現這種情況)

  • 如果正常速度放圈,移動方向圈會變得密集,從而導致其前進方向的圈掃過的角度比其身後的圈掃過的角度要大,因此身後方向只需少許橫移即可躲過。 多普勒效應?

  • 如果加速技能放圈,理想情況為緊緊跟著第一輪產生的圈,那麼每個方向的球經過的軌跡都會很接近一條直線,只要嚴格放出第N與N+1輪圈的位置,那麼這兩輪圈之間將會有很大的空隙。 音障?

    放圈的人的速度受兩個制約條件:

  • 一、若跟隨前一輪圈,則必須慢於前一輪圈(上限)

  • 二、必須在下一輪圈落地前離開爆炸範圍(下限)

不過目前也只是一些猜想,實戰中的情況要複雜得多,是否也可以考慮特殊情況下DZ幫吃缺口/SS傳送門飛走這樣的戰術。

之前帖子中有人提出的弧線跑位效果(靜座標系)完成

動座標系一想就可以知道效果,而程序上實現比較困難就不作模擬了。

靜座標系,正向轉動90度放圈

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

靜座標系,反向轉動90度放圈

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

可以看到效果並不理想

靜座標系,反向轉動180度放圈

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

場地右側同樣出現了類似直線放圈的空隙,但跑位難度增加很多,顯然不如直線跑位

魔獸世界M雞蛋阿基米德螺旋線之Matlab動圖!國服加油!

效果同樣沒有想象中理想

附Matlab源代碼,長慎點。

通過改變x1,y1至xt,yt的值即可改變 每一輪圈的位置,也側面反映的人物移動速度和方向。

改變註釋“球速”那一行中間的數字可以改變球的移動速度。

按需修改~

clear

axis([-40,60,-40,60])

hold on

% r=10;

% 想要弧線放圈則使用參數r*cosd(角度)為x賦值,使用r*sind(角度)為y賦值即可

x1=-20;

y1=0;

x2=-15;

y2=0;

x3=-10;

y3=0;

x4=-5;

y4=0;

x5=0;

y5=0;

x6=5;

y6=0;

x7=10;

y7=0;

x8=15;

y8=0;

x9=20;

y9=0;

xt=25;

yt=0;

% 直線軌跡部分,有需要可以取消註釋

% plot([x1,x1+100*cosd(60)],[y1,y1+100*sind(60)],'b')

% plot([x2,x2+100*cosd(70)],[y2,y2+100*sind(70)],'b')

% plot([x3,x3+100*cosd(80)],[y3,y3+100*sind(80)],'b')

% plot([x4,x4+100*cosd(90)],[y4,y4+100*sind(90)],'b')

% plot([x5,x5+100*cosd(100)],[y5,y5+100*sind(100)],'b')

% plot([x6,x6+100*cosd(110)],[y6,y6+100*sind(110)],'b')

% plot([x7,x7+100*cosd(120)],[y7,y7+100*sind(120)],'b')

% plot([x8,x8+100*cosd(130)],[y8,y8+100*sind(130)],'b')

% plot([x9,x9+100*cosd(140)],[y9,y9+100*sind(140)],'b')

% plot([xt,xt+100*cosd(150)],[yt,yt+100*sind(150)],'b')

% plot([x1,x1+50*cosd(0)],[y1,y1+50*sind(0)],'b')

% plot([x2,x2+50*cosd(10)],[y2,y2+50*sind(10)],'b')

% plot([x3,x3+50*cosd(20)],[y3,y3+50*sind(20)],'b')

% plot([x4,x4+50*cosd(30)],[y4,y4+50*sind(30)],'b')

% plot([x5,x5+50*cosd(40)],[y5,y5+50*sind(40)],'b')

% plot([x6,x6+50*cosd(50)],[y6,y6+50*sind(50)],'b')

% plot([x7,x7+50*cosd(60)],[y7,y7+50*sind(60)],'b')

% plot([x8,x8+100*cosd(70)],[y8,y8+100*sind(70)],'b')

% plot([x9,x9+100*cosd(80)],[y9,y9+100*sind(80)],'b')

% plot([xt,xt+100*cosd(90)],[yt,yt+100*sind(90)],'b')

h11 = plot(x1,y1,'or');

h21 = plot(x1,y1,'or');

h31 = plot(x1,y1,'or');

h41 = plot(x1,y1,'or');

h51 = plot(x1,y1,'or');

h61 = plot(x1,y1,'or');

h12 = plot(x2,y2,'or');

h22 = plot(x2,y2,'or');

h32 = plot(x2,y2,'or');

h42 = plot(x2,y2,'or');

h52 = plot(x2,y2,'or');

h62 = plot(x2,y2,'or');

h13 = plot(x3,y3,'or');

h23 = plot(x3,y3,'or');

h33 = plot(x3,y3,'or');

h43 = plot(x3,y3,'or');

h53 = plot(x3,y3,'or');

h63 = plot(x3,y3,'or');

h14 = plot(x4,y4,'or');

h24 = plot(x4,y4,'or');

h34 = plot(x4,y4,'or');

h44 = plot(x4,y4,'or');

h54 = plot(x4,y4,'or');

h64 = plot(x4,y4,'or');

h15 = plot(x5,y5,'or');

h25 = plot(x5,y5,'or');

h35 = plot(x5,y5,'or');

h45 = plot(x5,y5,'or');

h55 = plot(x5,y5,'or');

h65 = plot(x5,y5,'or');

h16 = plot(x6,y6,'or');

h26 = plot(x6,y6,'or');

h36 = plot(x6,y6,'or');

h46 = plot(x6,y6,'or');

h56 = plot(x6,y6,'or');

h66 = plot(x6,y6,'or');

h17 = plot(x7,y7,'or');

h27 = plot(x7,y7,'or');

h37 = plot(x7,y7,'or');

h47 = plot(x7,y7,'or');

h57 = plot(x7,y7,'or');

h67 = plot(x7,y7,'or');

h18 = plot(x8,y8,'or');

h28 = plot(x8,y8,'or');

h38 = plot(x8,y8,'or');

h48 = plot(x8,y8,'or');

h58 = plot(x8,y8,'or');

h68 = plot(x8,y8,'or');

h19 = plot(x9,y9,'or');

h29 = plot(x9,y9,'or');

h39 = plot(x9,y9,'or');

h49 = plot(x9,y9,'or');

h59 = plot(x9,y9,'or');

h69 = plot(x9,y9,'or');

h1t = plot(xt,yt,'or');

h2t = plot(xt,yt,'or');

h3t = plot(xt,yt,'or');

h4t = plot(xt,yt,'or');

h5t = plot(xt,yt,'or');

h6t = plot(xt,yt,'or');

z=0:0.2:500;%球速,改變中間的數字即可改變球速

a=35:35:340;

for i = 1:500

set(h11,'Xdata',z(i)+x1,'Ydata',0+y1);

set(h21,'Xdata',z(i)*cosd(60)+x1,'Ydata',z(i)*sind(60)+y1);

set(h31,'Xdata',z(i)*cosd(120)+x1,'Ydata',z(i)*sind(120)+y1);

set(h41,'Xdata',z(i)*cosd(180)+x1,'Ydata',z(i)*sind(180)+y1);

set(h51,'Xdata',z(i)*cosd(240)+x1,'Ydata',z(i)*sind(240)+y1);

set(h61,'Xdata',z(i)*cosd(300)+x1,'Ydata',z(i)*sind(300)+y1);

if i>=a(1)

set(h12,'Xdata',z(i-a(1)+1)*cosd(10)+x2,'Ydata',z(i-a(1)+1)*sind(10)+y2);

set(h22,'Xdata',z(i-a(1)+1)*cosd(60+10)+x2,'Ydata',z(i-a(1)+1)*sind(60+10)+y2);

set(h32,'Xdata',z(i-a(1)+1)*cosd(120+10)+x2,'Ydata',z(i-a(1)+1)*sind(120+10)+y2);

set(h42,'Xdata',z(i-a(1)+1)*cosd(180+10)+x2,'Ydata',z(i-a(1)+1)*sind(180+10)+y2);

set(h52,'Xdata',z(i-a(1)+1)*cosd(240+10)+x2,'Ydata',z(i-a(1)+1)*sind(240+10)+y2);

set(h62,'Xdata',z(i-a(1)+1)*cosd(300+10)+x2,'Ydata',z(i-a(1)+1)*sind(300+10)+y2);

end

if i>=a(2)

set(h13,'Xdata',z(i-a(2)+1)*cosd(20)+x3,'Ydata',z(i-a(2)+1)*sind(20)+y3);

set(h23,'Xdata',z(i-a(2)+1)*cosd(60+20)+x3,'Ydata',z(i-a(2)+1)*sind(60+20)+y3);

set(h33,'Xdata',z(i-a(2)+1)*cosd(120+20)+x3,'Ydata',z(i-a(2)+1)*sind(120+20)+y3);

set(h43,'Xdata',z(i-a(2)+1)*cosd(180+20)+x3,'Ydata',z(i-a(2)+1)*sind(180+20)+y3);

set(h53,'Xdata',z(i-a(2)+1)*cosd(240+20)+x3,'Ydata',z(i-a(2)+1)*sind(240+20)+y3);

set(h63,'Xdata',z(i-a(2)+1)*cosd(300+20)+x3,'Ydata',z(i-a(2)+1)*sind(300+20)+y3);

end

if i>=a(3)

set(h14,'Xdata',z(i-a(3)+1)*cosd(30)+x4,'Ydata',z(i-a(3)+1)*sind(30)+y4);

set(h24,'Xdata',z(i-a(3)+1)*cosd(60+30)+x4,'Ydata',z(i-a(3)+1)*sind(60+30)+y4);

set(h34,'Xdata',z(i-a(3)+1)*cosd(120+30)+x4,'Ydata',z(i-a(3)+1)*sind(120+30)+y4);

set(h44,'Xdata',z(i-a(3)+1)*cosd(180+30)+x4,'Ydata',z(i-a(3)+1)*sind(180+30)+y4);

set(h54,'Xdata',z(i-a(3)+1)*cosd(240+30)+x4,'Ydata',z(i-a(3)+1)*sind(240+30)+y4);

set(h64,'Xdata',z(i-a(3)+1)*cosd(300+30)+x4,'Ydata',z(i-a(3)+1)*sind(300+30)+y4);

end

if i>=a(4)

set(h15,'Xdata',z(i-a(4)+1)*cosd(40)+x5,'Ydata',z(i-a(4)+1)*sind(40)+y5);

set(h25,'Xdata',z(i-a(4)+1)*cosd(60+40)+x5,'Ydata',z(i-a(4)+1)*sind(60+40)+y5);

set(h35,'Xdata',z(i-a(4)+1)*cosd(120+40)+x5,'Ydata',z(i-a(4)+1)*sind(120+40)+y5);

set(h45,'Xdata',z(i-a(4)+1)*cosd(180+40)+x5,'Ydata',z(i-a(4)+1)*sind(180+40)+y5);

set(h55,'Xdata',z(i-a(4)+1)*cosd(240+40)+x5,'Ydata',z(i-a(4)+1)*sind(240+40)+y5);

set(h65,'Xdata',z(i-a(4)+1)*cosd(300+40)+x5,'Ydata',z(i-a(4)+1)*sind(300+40)+y5);

end

if i>=a(5)

set(h16,'Xdata',z(i-a(5)+1)*cosd(50)+x6,'Ydata',z(i-a(5)+1)*sind(50)+y6);

set(h26,'Xdata',z(i-a(5)+1)*cosd(60+50)+x6,'Ydata',z(i-a(5)+1)*sind(60+50)+y6);

set(h36,'Xdata',z(i-a(5)+1)*cosd(120+50)+x6,'Ydata',z(i-a(5)+1)*sind(120+50)+y6);

set(h46,'Xdata',z(i-a(5)+1)*cosd(180+50)+x6,'Ydata',z(i-a(5)+1)*sind(180+50)+y6);

set(h56,'Xdata',z(i-a(5)+1)*cosd(240+50)+x6,'Ydata',z(i-a(5)+1)*sind(240+50)+y6);

set(h66,'Xdata',z(i-a(5)+1)*cosd(300+50)+x6,'Ydata',z(i-a(5)+1)*sind(300+50)+y6);

end

if i>=a(6)

set(h17,'Xdata',z(i-a(6)+1)*cosd(60)+x7,'Ydata',z(i-a(6)+1)*sind(60)+y7);

set(h27,'Xdata',z(i-a(6)+1)*cosd(60+60)+x7,'Ydata',z(i-a(6)+1)*sind(60+60)+y7);

set(h37,'Xdata',z(i-a(6)+1)*cosd(120+60)+x7,'Ydata',z(i-a(6)+1)*sind(120+60)+y7);

set(h47,'Xdata',z(i-a(6)+1)*cosd(180+60)+x7,'Ydata',z(i-a(6)+1)*sind(180+60)+y7);

set(h57,'Xdata',z(i-a(6)+1)*cosd(240+60)+x7,'Ydata',z(i-a(6)+1)*sind(240+60)+y7);

set(h67,'Xdata',z(i-a(6)+1)*cosd(300+60)+x7,'Ydata',z(i-a(6)+1)*sind(300+60)+y7);

end

if i>=a(7)

set(h18,'Xdata',z(i-a(7)+1)*cosd(70)+x8,'Ydata',z(i-a(7)+1)*sind(70)+y8);

set(h28,'Xdata',z(i-a(7)+1)*cosd(60+70)+x8,'Ydata',z(i-a(7)+1)*sind(60+70)+y8);

set(h38,'Xdata',z(i-a(7)+1)*cosd(120+70)+x8,'Ydata',z(i-a(7)+1)*sind(120+70)+y8);

set(h48,'Xdata',z(i-a(7)+1)*cosd(180+70)+x8,'Ydata',z(i-a(7)+1)*sind(180+70)+y8);

set(h58,'Xdata',z(i-a(7)+1)*cosd(240+70)+x8,'Ydata',z(i-a(7)+1)*sind(240+70)+y8);

set(h68,'Xdata',z(i-a(7)+1)*cosd(300+70)+x8,'Ydata',z(i-a(7)+1)*sind(300+70)+y8);

end

if i>=a(8)

set(h19,'Xdata',z(i-a(8)+1)*cosd(80)+x9,'Ydata',z(i-a(8)+1)*sind(80)+y9);

set(h29,'Xdata',z(i-a(8)+1)*cosd(60+80)+x9,'Ydata',z(i-a(8)+1)*sind(60+80)+y9);

set(h39,'Xdata',z(i-a(8)+1)*cosd(120+80)+x9,'Ydata',z(i-a(8)+1)*sind(120+80)+y9);

set(h49,'Xdata',z(i-a(8)+1)*cosd(180+80)+x9,'Ydata',z(i-a(8)+1)*sind(180+80)+y9);

set(h59,'Xdata',z(i-a(8)+1)*cosd(240+80)+x9,'Ydata',z(i-a(8)+1)*sind(240+80)+y9);

set(h69,'Xdata',z(i-a(8)+1)*cosd(300+80)+x9,'Ydata',z(i-a(8)+1)*sind(300+80)+y9);

end

if i>=a(9)

set(h1t,'Xdata',z(i-a(9)+1)*cosd(90)+xt,'Ydata',z(i-a(9)+1)*sind(90)+yt);

set(h2t,'Xdata',z(i-a(9)+1)*cosd(60+90)+xt,'Ydata',z(i-a(9)+1)*sind(60+90)+yt);

set(h3t,'Xdata',z(i-a(9)+1)*cosd(120+90)+xt,'Ydata',z(i-a(9)+1)*sind(120+90)+yt);

set(h4t,'Xdata',z(i-a(9)+1)*cosd(180+90)+xt,'Ydata',z(i-a(9)+1)*sind(180+90)+yt);

set(h5t,'Xdata',z(i-a(9)+1)*cosd(240+90)+xt,'Ydata',z(i-a(9)+1)*sind(240+90)+yt);

set(h6t,'Xdata',z(i-a(9)+1)*cosd(300+90)+xt,'Ydata',z(i-a(9)+1)*sind(300+90)+yt);

end

pause(0.01); % 調整速度

end

hold off

來自NGA 作者糖灬小熊

相關推薦

推薦中...