有5个位置坐标点(经纬度坐标),需要给坐标点进行1-5编号,然后计算点与点之间的距离,然后随机选取一点作为第一个点,再根据距离最近的选择在剩余节点中选择与该点距离最近的点,如果剩余节点中有多个点与该点距离相等,那在这几个点中随机选择一点,一直这样进行,最后生成5×5的编号矩阵,请教一下大家这个用matlab怎么做呀
我随机生成5个点
rng(1);%指定随机种子,构建可以重复的随机实验
p = rand(5,2);
parr = (1:5)';
D = (p(:,1)-p(:,1)').^2 + (p(:,2)-p(:,2)').^2;
flag = true(5,1);%标记是否被选中
q = randi([1,5],1);%随机选取一点作为第一个点
flag(q) = false;
while any(flag)
qe = q(end);%每次最后选到的点
p0 = parr(flag);%剩余点
ds = D(qe, p0); %选出qe点对剩余点的距离
u = find(min(ds)==ds);%找到距离最小的点在p0中的位置
u = u(randi([1,numel(u)]),1);%如果剩余节点中有多个点与该点距离相等,那在这几个点中随机选择一点
eq = p0(u);
q = [q; eq];%获取编号
flag(eq) = false;%改变flag
end
q%q就是点的顺序
arrayfun(@(i)text(p(q(i),1)+0.01,p(q(i),2)+0.01,num2str(q(i))),1:size(q,1)); hold on;
plot(p(q,1),p(q,2),'bs-','MarkerSize',6,'MarkerFacecolor','r')
text(p(q(1),1)-0.01,p(q(1),2)-0.01,'出发点')
效果
有帮助望采纳