2020美赛模拟相关程序

本文通过构建球员传球网络,分析了球队的进攻路径与控球时间,并利用MATLAB进行数据可视化,展示了球员间的传球频率与关键传球路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值