
How to make a nested FOR loop of distance between points?
60 ビュー (過去 30 日間)
表示 古いコメント
I have two sets each with ten objects with coordinates (x,y,z) in each set. I want to map the distances between each of the points in set 1 to each of the points in set 2. At the end, I want an array 1x100, with the 100 unique distances between each ten points of set 1 and each ten points of set 2.
To do this, I was thinking of having a code similar to this:
for I = 1:1 xvalue1 = rand(10,1)*1000; end
for J = 1:1 yvalue1 = rand(10,1)*1000; end
for K = 1:1 zvalue1 = rand(10,1)*1000; end
set1 = [xvalue1 yvalue1 zvalue1];
for I = 1:1 xvalue2 = rand(10,1)*1000; end
for J = 1:1 yvalue2 = rand(10,1)*1000; end
for K = 1:1 zvalue2 = rand(10,1)*1000; end
set2 = [xvalue2 yvalue2 zvalue2];
Which runs well. For the calculating the actual distances, my preliminary code is:
i = 1;
j = 1;
for i=1:10
distance(i) = sqrt((xvalue2(i+1) - xvalue1(i+1)).^2 + (yvalue2(i+1) - yvalue1(i+1)).^2 + (zvalue2(i+1) - zvalue1(i+1)).^2);
for j=1:10
distance(j) = sqrt((xvalue2(j+1) - xvalue1(j+1)).^2 + (yvalue2(j+1) - yvalue1(j+1)).^2 + (zvalue2(j+1) - zvalue1(j+1)).^2);
end
end
However, the error I get is that "the index exceeds matrix dimensions" Does anyone understand where my error is?
Thank you
0 件のコメント
採用された回答
Iddo Weiner
2017 年 3 月 22 日
Hi, you had some unnecessary bits of code there that made it complicated to follow. Here's a shorter code that does what you asked for:
% get random data
set1 = rand(10,3)*1000 ;
set2 = rand(10,3)*1000 ;
% calculate
OUT = nan(10,10); %create array for holding output
for i = 1:(length(set1))
for j = 1:length(set2)
OUT(i,j) = sum( (set1(i,:) - set2(j,:)).^2);
end
end
% plot
imagesc(OUT)
ylabel('set1')
xlabel('set2')
HC = colorbar;
ylabel(HC,'distance')

1 件のコメント
Iddo Weiner
2017 年 3 月 22 日
BTW - your error is a result using i+1. i runs until 10, so in the last iteration your i equals 11, which doesn't exist in the sets
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!