@T2020美赛模拟相关程序OC
%%生成邻接矩阵T
%%绘制网络图
names={‘D1’,‘D2’,‘D3’,‘D4’,‘D5’,‘D6’,‘D7’,‘D8’,‘F1’,‘F2’,‘F3’,‘F4’,‘F5’,‘F6’,‘G1’,‘M1’,‘M2’,‘M3’,‘M4’,‘M5’,‘M6’,‘M7’,‘M8’,‘M9’,‘M10’,‘M11’,‘M12’,‘M13’};
Q1=digraph(T,names);
p=plot(Q1,‘b’);
p.Marker = ‘o’;%指定节点的形状为正方形
p.NodeColor = ‘r’;%指定节点的颜色为红色
p.MarkerSize =5;%指定节点的大小为10
title(‘球员有向网络图’)
%%筛选出哈士奇队关于duel、free kick、pass数据
n=length(fullevents);
for k=n👎1
if strcmp(fullevents(k,1),‘Huskies’)|strcmp(fullevents(k,4),‘Pass’)&strcmp(fullevents(k,4),‘Shot’)&strcmp(fullevents(k,4),‘Duel’)
fullevents(k,:)=[];
end
end
%%绘制进攻路径网络图
clc
eventtime=[];finish1=[1];
for k=1:length(A)
eventtime=[eventtime;str2num(A(k,3))];
end%提取比赛时刻数据
for k=1:length(eventtime)-1
if eventtime(k)>eventtime(k+1)
finish1=[finish1;k];
end
end%找出比赛开始时刻
for k=1:length(A)
switch A(k,2)
case ‘Huskies_G1’
A(k,2)=‘17’;
case ‘Huskies_F1’
A(k,2)=‘11’;
case ‘Huskies_D1’
A(k,2)=‘1’;
case ‘Huskies_M1’
A(k,2)=‘18’;
case ‘Huskies_F2’
A(k,2)=‘12’;
case ‘Huskies_D2’
A(k,2)=‘2’;
case ‘Huskies_D3’
A(k,2)=‘3’;
case’Huskies_D4’
A(k,2)=‘4’;
case’Huskies_D5’
A(k,2)=‘5’;
case ‘Huskies_D6’
A(k,2)=‘6’;
case ‘Huskies_D7’
A(k,2)=‘7’;
case’Huskies_D8’
A(k,2)=‘8’;
case ‘Huskies_D9’
A(k,2)=‘9’;
case ‘Huskies_D10’
A(k,2)=‘10’;
case ‘Huskies_F3’
A(k,2)=‘13’;
case ‘Huskies_F4’
A(k,2)=‘14’;
case ‘Huskies_F5’
A(k,2)=‘15’;
case ‘Huskies_F6’
A(k,2)=‘16’;
case ‘Huskies_M2’
A(k,2)=‘19’;
case ‘Huskies_M3’
A(k,2)=‘20’;
case ‘Huskies_M4’
A(k,2)=‘21’;
case ‘Huskies_M5’
A(k,2)=‘22’;
case ‘Huskies_M6’
A(k,2)=‘23’;
case ‘Huskies_M7’
A(k,2)=‘24’;
case ‘Huskies_M8’
A(k,2)=‘25’;
case ‘Huskies_M9’
A(k,2)=‘26’;
case’Huskies_M10’
A(k,2)=‘27’;
case ‘Huskies_M11’
A(k,2)=‘28’;
case’Huskies_M12’
A(k,2)=‘29’;
case ‘Huskies_M13’
A(k,2)=‘30’;
end
end%将球员用数字编号
s=[];t=[];
for k=1:length(finish1)-1
for l=finish1(k):finish1(k+1)
if strcmp(A(l,7),‘Duel’)&&strcmp(A(l,7),‘Free Kick’)
s=[s str2num(A(l,3))];
t=[t str2num(A(l+1,3))];
elseif strcmp(A(l,7),'Duel')
Q1=digraph(s,t);
p=plot(Q1);
p.NodeColor = 'r';
p.Marker = 'o';%指定节点的形状为正方形
p.NodeColor = 'b';%指定节点的颜色为红色
p.MarkerSize =2;%指定节点的大小为10
title('进攻路径')
hold on
break
end
end
end%绘出图像
%%找出控球时间最长的传球路径
clc
length_of_A=length(A); l= 0;
%分若干条进攻路径,并记录控球时长
for k=1:length_of_A
data_of_location(k,1)=str2num(A(k,5));
data_of_location(k,2)=str2num(A(k,6));
data_of_location(k,3)=str2num(A(k,7));
data_of_location(k,4)=str2num(A(k,8));
end %提取球员坐标数据
time_of_path=[];l=0;
for k=1:length_of_A-1
if strcmp(A(k,4),‘Pass’)
time_of_path(2,l)=eventtime(k)- time_of_path(1,l); time_of_path(4,l)=k;
else if ~strcmp(A(k+1,4),‘Pass’)
continue
end
time_of_path(1,l+1)=eventtime(k); time_of_path(3,l+1)=k;l=l+1;
end
end
[u,v]=max(time_of_path(2,:));s_of_path=[];t_of_path=[];
xdata=[]; ydata=[];
for k=time_of_path(3,v):time_of_path(4,v)
s_of_path=[s_of_path A(k,2)];
t_of_path=[t_of_path A(k+1,2)];
xdata=[xdata data_of_location(k,1)];
ydata=[ydata data_of_location(k,2)];
end%找出关键路径
for l=1:length(time_of_path)
for k=time_of_path(3,l):time_of_path(4,l)
s_of_path=[s_of_path str2num(A(k,2))];
t_of_path=[t_of_path str2num(A(k+1,2))];
xdata(str2num(A(k,2)))=data_of_location(k,1);
ydata(str2num(A(k,2)))= data_of_location(k,2);
end
G=digraph(s_of_path,t_of_path);
p=plot(G);
P.Marker=‘o’;
p.NodeColor=‘r’;
p.MarkerSize=5;
p.XData=xdata;
p.YData=ydata;
hold on
end %绘制全部完整传球路径
for k=1:length_of_A
name_of_player(k)=str2num(A(k,2));
end%提取player标号
%建立以传球概率为权重的的传球网路
clc
count_of_pass=zeros(31,31);%用于记录i给j传球次数
for k=1:length_of_A
if strcmp(A(k,4),‘Pass’)
count_of_pass(name_of_player(k),name_of_player(k+1))= count_of_pass(name_of_player(k),name_of_player(k+1))+1;
end
end
count_of_pass(1:31,31)=sum(count_of_pass,2);
count_of_pass(1:30,1:30)= count_of_pass(1:30,1:30)./count_of_pass(1:30,31);%将传球次数更改传球频率
count_of_pass(:,31)=[];count_of_pass(31,:)=[];
s=[];t=[];weights=[];
node_names={‘D1’,‘D2’,‘D3’,‘D4’,‘D5’,‘D6’,‘D7’,‘D8’,‘D9’,‘D10’,‘F1’,‘F2’,‘F3’,‘F4’,‘F5’,‘F6’,‘G1’,‘M1’,‘M2’,‘M3’,‘M4’,‘M5’,‘M6’,‘M7’,‘M8’,‘M9’,‘M10’,‘M11’,‘M12’,‘M13’};
for k=1:30
for l=1:30
if count_of_pass(k,l)
s=[s k];t=[t l];weights=[weights count_of_pass(k,l)];
end
end
end%设置源点,汇点及权重数据
G = digraph(s,t,weights,node_names);
LWidths = 5*G.Edges.Weight/max(G.Edges.Weight);
plot(G,‘NodeColor’,‘r’,‘NodeLabel’,G.Nodes.Name,‘MarkerSize’,2.5,‘LineWidth’,LWidths)