Soru sorEn yakın noktayı 1 kere seçme
mehmetozdogan tarafından 5 yıl önce soruldu

merhaba 
İki adet 2 boyutlu noktalardan oluşan dikdörtgen şeklinde kesitim var. İlk kesitteki veriler X ile gösteriliyor ikinci kesitteki veriler * ile gösteriliyor. Ben yazdığım kodda kesit merkezinden (O) önce herhangi bir X'e olan mesafeyi hesaplatıp daha sonra X'e en yakın *'ı buldurup merkezle * arasındaki mesafeyi hesaplatıp bu iki mesafenin farkını aldırıyorum..Ancak bazen bir problem çıkabiliyor..Şekil üzerinde daha kolay anlatabilirim sanırım. Aşağıda verdiğim şekilde O ile X2  ardından O ile *b arasındaki mesafeleri hesaplatıp farkını aldırabiliyorum ancak. X1'i hesaplatmak istediğimde *b daha yakın olduğu için O-X1 ile O-*b  arasındaki mesafeleri hesaplayıp farkını alıyor. Halbuki ben O-X1 ile O-*a arasındaki mesafeyi hesaplatmak istiyorum. Bunu da her *'ı 1 defa kullanma şartı koyarak yapabilirim sanırım yanlız bu şartı koyarken *'ın X'e en yakın olanla hesap yapması gerek.Ancak bunu nasıl yapabileceğim konusunda fikrim yok. Yazdıgım kodun ilgili parçasını da aşağıda bulabilirsiniz. İlginiz için teşekkürler..
https://imgyukle.com/i/unt2.k78vsS

xz=[newVar(:,2) newVar(:,3)]
d1 = pdist2(newVar5,xz);
[~,idx5] = pdist2(newVar2,newVar,'euclidean','smallest',1);
xz2 = newVar2(idx5,:);
xz3=[xz2(:,2) xz2(:,3)]
d2 = pdist2(newVar5,xz3);
D=d2 – d1

 
 

newVar = X'in ham verileri, daha sonra xz ile tanımlanıyor
newVar2 = *'ın ham verileri, daha sonra xz3 ile tanımlanıyor
newVar5 = kesitin merkezi (O)

 
 
 
 

2 Cevap
sayginer Yönetici tarafından 5 yıl önce cevaplandı

Bunu da her *’ı 1 defa kullanma şartı koyarak yapabilirim sanırım yanlız bu şartı koyarken *’ın X’e en yakın olanla hesap yapması gerek.Ancak bunu nasıl yapabileceğim konusunda fikrim yok.

Bu soylediginizi yapabilmek icin once her noktanin diger/leri arasindaki mesafeye hesaplatmamiz ve daha sonra en yakin olanlari tespit etmemiz gerekiyor. Bunu dongu icerisinde yazabilirsiniz.
Ben su kismi tam olarak anlayamadim:
Mesela iki kesit icin de verileri olusturan matrislerin (iki ayri matris) her elemani bir digerine karsilik gelmiyor mu?
Mesela Birinci matrisin 1. elementi ile ikinci matrisin 1. elementi gibi?

mehmetozdogan tarafından 5 yıl önce cevaplandı

İki matrisdeki elemanlar birbirine karşılık gelmiyor malesef. Bunun sebebinin verileri Kmeans komutu ile daha büyük verilerden küme oluşturmamdan oldugunu düşünüyorum. Yapıyı daha iyi incelemek isterseniz, yazdığım kodun tamamını aşağıda ve ornek dosyayı da ekte bulabilirsiniz.İlginiz için teşekkürler…
https://dosya.co/3u2pzxikspmw/SP_2_1.xlsx.html
https://dosya.co/duks7wk979ic/SP_2_2.xlsx.html
 
clc;clear;
x=xlsread('SP_2_1.xlsx', 'A:A');
y=xlsread('SP_2_1.xlsx', 'B:B');
z=xlsread('SP_2_1.xlsx', 'C:C');
a=xlsread('SP_2_2.xlsx', 'A:A');
b=xlsread('SP_2_2.xlsx', 'B:B');
c=xlsread('SP_2_2.xlsx', 'C:C');
xyz=[x y z];
abc=[a b c];
rng(1);
[idx1,C1] = kmeans(xyz,200,'distance','sqEuclidean','MaxIter',500, 'Replicates', 10);
[idx2,C2] = kmeans(abc,200,'distance','sqEuclidean','MaxIter',500, 'Replicates', 10);
for i=1:200
t(i)=i
end
t=t';
for i=1:200
u(i)=i;
end
u=u';
[dist,idx3] = pdist2(xyz, C1, 'euclidean', 'Smallest',1);
newVar = xyz(idx3 ,:);
plot(newVar(:,1), newVar(:,3), 'bx');
%text(newVar(:,1)+0.02,newVar(:,3),num2str(t),'FontSize',7);
hold on;
xlabel ('x – axis', 'fontsize', 12);
ylabel ('z – axis', 'fontsize', 12);
zlabel ('z – axis', 'fontsize', 12);
grid
[dist2,idx4] = pdist2(abc, C2, 'euclidean', 'Smallest',1);
newVar2 = abc(idx4 ,:);
plot(newVar2(:,1), newVar2(:,3), 'r*');
%text(newVar2(:,1),newVar2(:,2),newVar2(:,3),num2str(u),'FontSize',7);
axis equal;
ellipse_t = fit_ellipse(newVar(:,1), newVar(:,3));
newVar5=[ellipse_t.X0_in ellipse_t.Y0_in]
plot(newVar5(:,1), newVar5(:,2), 'go');
xz=[newVar(:,1) newVar(:,3)]
d1 = pdist2(newVar5,xz);
[~,idx5] = pdist2(newVar2,newVar,'euclidean','smallest',1);
xz2 = newVar2(idx5,:);
xz3=[xz2(:,1) xz2(:,3)]
d2 = pdist2(newVar5,xz3);
D=d2 – d1
dx=D(:)