想在matlab中画一组图出来,程序已经编出来了,结果变量也可以求得,但图却画不出来……求matlab学霸指点
程序如下:
clear;
clc;
x=[413;403;383.50;381;339;335;317;334.50;333;282;247;219;225;280;290;337;415;432;418;444];
y=[359;343;351;377.50;376;383;362;353.50;342;325;301;316;270;292;335;328;335;371;374;394];
%x、y为20个服务平台的横纵坐标
m=[219;280;337;251;234;225;212;250.50;243;246;331;325;335];
n=[316;292;328;277;271;265;290;306;328;337;335;372;395;];
%m、n为13个交通要道的横纵坐标
for i=1:13
t1=sqrt((m(i)-x(1))^2+(n(i)-y(1))^2);
t2=0;
for j=1:20
t=sqrt((m(i)-x(j))^2+(n(i)-y(j))^2);
if t<t1
t1=t;
t2=j; %记录离该交通要道最近的服务平台的横纵坐标。
end
a(i)=t1;
b(i)=t2;
end
end
a=a'
b=b'
%对所求的结果进行绘图。
len=length(a)+length(m);
c=zeros(1,len); %把每一个交通要道节点与其对应的最近服务平台的横坐标存放在同一矩阵中。
k=0;
for i=1:2:len-1
c(i)=a(i-k);
k=k+1;
end
k=1;
for j=2:2:len
c(j)=m(j-k);
k=k+1;
end
% c(1:2:len-1)=a;
% c(2:2:len)=m;
len=length(b)+length(n);
d=zeros(1,len); %把每一个交通要道节点与其对应的最近服务平台的纵坐标存放在同一矩阵中。
k=0;
for i=1:2:len-1
d(i)=b(i-k);
k=k+1;
end
k=1;
for j=2:2:len
d(j)=n(j-k);
k=k+1;
end
% d(1:2:len-1)=b;
% d(2:2:len)=n;
% figure(1)
for i=1:2:len
plot(c(i),c(i+1),'-g'); %把交通要道节点与其对应的最近服务平台的两者横坐标画出,并相连
hold on;
plot(d(i),d(i+1),'--y'); %把交通要道节点与其对应的最近服务平台的两者纵坐标画出,并相连
hold on;
end
c和d都是一个1行26列的矩阵,c矩阵存放的是每一个交通要道节点与其对应的最近服务平台节点的横坐标,当c(1)为第1个交通要道节点的横坐标时,c(2)就为距第1个交通要道节点最近的服务平台的横坐标……以此类推,共有13组这样的向量;举个例子,如:第1个交通要道节点的横坐标为56,与其对应的最近服务平台节点的横坐标为45,则当c(1)=56,c(2)=45。。同理,d矩阵存放的是每一个交通要道节点与其对应的最近服务平台节点的纵坐标,也是同样的排列方法。。 展开
你的代码有错误,而且好复杂,我改了一下
clear;
clc;
x=[413;403;383.50;381;339;335;317;334.50;333;282;247;219;225;280;290;337;415;432;418;444];
y=[359;343;351;377.50;376;383;362;353.50;342;325;301;316;270;292;335;328;335;371;374;394];
%x、y为20个服务平台的横纵坐标
m=[219;280;337;251;234;225;212;250.50;243;246;331;325;335];
n=[316;292;328;277;271;265;290;306;328;337;335;372;395;];
%m、n为13个交通要道的横纵坐标
a=zeros(13,1);%a是13x1的数列,用于记录连接
%a(1)中储存的是第一个节点要连接的平台的序号
for i=1:13
t1=sqrt((m(i)-x(1))^2+(n(i)-y(1))^2);
t2=1;
for j=2:20
t=sqrt((m(i)-x(j))^2+(n(i)-y(j))^2);
if t<t1
t1=t;
t2=j; %记录离该交通要道最近的服务平台的横纵坐标。
end
end
a(i)=t2;
end
plot(m,n,'bo');
hold on;
plot(x,y,'r.');
for i=1:13
plot([m(i) x(a(i))],[n(i) y(a(i))],'-g'); %把交通要道节点与其对应的最近服务平台两者相连
end
hold off;
legend('交通要道','服务平台','连线','location','northwest');
结果
谢谢!
c和d都是一个1行26列的矩阵,c矩阵存放的是每一个交通要道节点与其对应的最近服务平台节点的横坐标,当c(1)为第1个交通要道节点的横坐标时,c(2)就为距第1个交通要道节点最近的服务平台的横坐标……以此类推,共有13组这样的向量;举个例子,如:第1个交通要道节点的横坐标为56,与其对应的最近服务平台节点的横坐标为45,则当c(1)=56,c(2)=45。
现在 c(1)=0,c(2)=219, d(1)=12,d(2)=316, 就是要在点(0,12)和点(219,316)之间连线吗?