Soru sorDüşey bileşen ve yatay bileşen hesaplama
mehmetozdogan tarafından 5 yıl önce soruldu

Merhabalar,
Uzun zamandır uzerinde çalıştıgım bir iş var ve hesaplamalarda hata yaptıgımı fark ettim. Mevcut kodum

clc;clear;
x=xlsread('ping1.xlsx', 'A:A');
y=xlsread('ping1.xlsx', 'B:B');
z=xlsread('ping1.xlsx', 'C:C');
a=xlsread('ping2.xlsx', 'A:A');
b=xlsread('ping2.xlsx', 'B:B');
c=xlsread('ping2.xlsx', 'C:C');
xyz=[x y z];
abc=[a b c];
rng(1);
[idx1,C1] = kmeans(xyz,100,'distance','sqEuclidean','MaxIter',500, 'Replicates', 10);
[idx2,C2] = kmeans(abc,100,'distance','sqEuclidean','MaxIter',500, 'Replicates', 10);
[dist,idx3] = pdist2(xyz, C1, 'euclidean', 'Smallest',1);
newVar = xyz(idx3 ,:);
plot3(newVar(:,1), newVar(:,2), newVar(:,3), 'bx');
hold on;
xlabel ('x - axis', 'fontsize', 12);
ylabel ('y - axis', 'fontsize', 12);
zlabel ('z - axis', 'fontsize', 12);
grid
[dist2,idx4] = pdist2(abc, C2, 'euclidean', 'Smallest',1);
newVar2 = abc(idx4 ,:);
plot3(newVar2(:,1), newVar2(:,2), newVar2(:,3), 'r*');
axis equal;
newVar3 = mean (newVar);
newVar4 = mean (newVar2),
newVar5 = (newVar3 + newVar4)/ 2;
plot3(newVar5(:,1), newVar5(:,2), newVar5(:,3), 'go');
m=[newVar(:,1) newVar(:,2) newVar(:,3)];
n=[newVar2(:,1) newVar2(:,2) newVar2(:,3)];
o=[newVar5(:,1) newVar5(:,2) newVar5(:,3)];
d1 = pdist2(newVar5,newVar); % distance(s) (many) between O and X
[~,idx5] = pdist2(newVar2,newVar,'euclidean','smallest',1); % indices of nearest * for EACH X
d2 = pdist2(newVar5,newVar2(idx5,:)); % distance(s) between O and * (nearest to X)
D=d2 - d1

Burada aslında algoritmanın yukardaki kısmı ile ilişkimiz yok yukarıdaki kısımdan newVar ve newVar2 olarak x,y,z verilerinden oluşan iki tane veri seti ürettim. newVar kesitte X ile gösterilen veriler newVar2 ise * ile gösterilen veriler. Ekteki resimle beraber bakarsanız daha anlamlı olur. (newVar5 'de merkez noktası)
Algoritmanın son kısmında yazdığım kodda.
d1 = pdist2(newVar5,newVar); % merkez ile x arasındaki mesafe
[~,idx5] = pdist2(newVar2,newVar,'euclidean','smallest',1); % X e en yakın *2A ait indis
d2 = pdist2(newVar5,newVar2(idx5,:)); %  Merkez ile X'e enyakın * arası mesafe 
D=d2 – d1
 
Merkezle (newVar5), X arasındaki mesafeyi ölçtüm (d1) sonra X’e en yakın * bulup ardından merkezle buldurduğum * arasındaki mesafeyi ölçerek (d2) bunları birbirinden çıkarttım (D=d2-d1) ancak bunun yaptıgım iş için hatalı olduğunu farkettim. Aslında yapmam gereken,
 
Herhangi bir X merkeze göre yatayla 45 derece ile 135 derece veya 225 derece ile 315 derece açı yaptığı bölgede kalıyorsa X ve * in düşey bileşenlerinin farkını 135 derece ile 225 derece veya 315 derece ile 45 derece arasında kalan bölgede kalıyorsa X ve * in yatay bileşenlerinin farkını aldırmam gerek.
 
Algoritma bir X noktası seçecek, bu X in merkeze göre yatayla yaptığı açıyı hesaplayacak ve o X in merkeze uzaklığının düşey veya yatay bileşen değerini bulacak (d1) (hangi bölgede ise ona göre düşey veya yatay). Sonra aynı işlemi o X’e en yakın *’a yapacak (d2)  ve D = d1-d2 farkını bulacak.
Umarım derdimi anlatabilmişimdir. Bu konuda yardımcı olabilecek var mı?
Teşekkürler
 
 
 
 

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

Remi yüklemeyi unutmusum aşağıdaki linkten görebilirsiniz
http://<a href="https://resmim.net/preview/HLeoP6.jpg"><img src="https://resmim.net/f/HLeoP6.jpg"></a&gt;