Soru sorKoordinat Düzleminde Noktalar Arasındaki Uzaklığı Hesaplamak
zynparslanturk tarafından 7 yıl önce soruldu

Koordinat düzleminde (2,4), (5,6) gibi noktalar belirlemek istiyorum. Daha sonra bunlar arasındaki uzaklıkları hesaplatmak istiyorum. Fakat baktığım tüm sayfalarda plot komutundan ve grafik çizdirmeden bahsedilmiş. Ben grafik çizdirmek istemiyorum, noktalar belirlemek istiyorum. Birkaç gündür de internette arıyorum fakat hiçbir şey bulamadım.
 
Mesela;
X        Y
4         5
5         9
7         7  
 
x,yleri belirli bu üç noktanın birbirlerine olan uzaklığını hesaplatmak istiyorum.
 
Eğer şu şekilde yazarsam,
X=[4;5;7]
Y=[5;9;7]
 
sqrt(((X(1,1)-X(2,1))^2)+((Y(1,1)-Y(2,1))^2))   şeklinde hesaplatabilirim.  
 
Fakat ben 13 noktanın; tüm kombinasyonlarını (her noktanın her noktaya olan uzaklığını) hesaplatarak 13×13 bir matris oluşturacağım.  
Daha koordinat düzlemi tarzında bir yolu var mıdır acaba? 
Saygılarımla

9 Cevap
En iyi cevap
hakkans Yönetici tarafından 7 yıl önce cevaplandı

Bunu yapmak için iç içe iki for döngüsü içeren bir yapı oluşturabilirsiniz. Aşağıdaki kodda ii göstergesi (indisi) seçilen noktayı belirtirken, içteki jj ile dönen döngü de diğer tüm noktaları gezmekte. Matristeki satır numarası seçilen noktanın sıra numarasını, sütun numarası ise mesafe ölçülen noktanın sıra numarasını temsil etmektedir. x ve y vektörleri rand komutuyla rastgele sayılardan oluşturulmuştur.

 

x=rand(13,1);
y=rand(13,1);
distmatrix=zeros(length(x));

 for ii=1:length(x)
    for jj=1:length(x)
      distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2)
    end
end

 

zynparslanturk tarafından 7 yıl önce cevaplandı

Mükemmel! Çok teşekkür ederim. For döngüsü kullanmaya çalıştım aslında ama tam oturtamadım ve çalıştıramadım. Matlab bilgim de çok kısıtlı doğrusu. Teşekkür ederim.

hlltrk tarafından 7 yıl önce cevaplandı

@zynparslanturk ben yukarıdaki kodu anlamadım ama sizinkine benzer bir sorunum var. Bu kod uzaklığı neye göre buluyor? Ben örneğin cm cinsinden aralarında uzaklık bulunan noktalarım arasında bunu nasıl yapabilirim? örneğin 1. noktamın koordinatı (0,0) 2. noktamın koordinatı (0,3) aralarında 3 cm var. 3. noktamın koordinatı (3,3). çıkan sonuc doğru gözüküyor ama ne nereyi gösteriyor bu sonuc matrisinde anlamadım.
x=[0 3 3];
y=[0 0 3];
distmatrix=zeros(length(x));
for ii=1:length(x)
for jj=1:length(x)
distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2)
end
sonuc matrisi :
0 3.0000 4.2426
3.0000 0 3.0000
4.2426 3.0000 0
 
 
 

hlltrk tarafından 7 yıl önce cevaplandı

Bu sonucta ne yeyi gösteriyor hiç anlamadım yardım eder misiniz?

distmatrix =
0 0 0
0 0 0
0 0 0

distmatrix =
0 3 0
0 0 0
0 0 0

distmatrix =
0 3.0000 4.2426
0 0 0
0 0 0

distmatrix =
0 3.0000 4.2426
3.0000 0 0
0 0 0

distmatrix =
0 3.0000 4.2426
3.0000 0 0
0 0 0

distmatrix =
0 3.0000 4.2426
3.0000 0 3.0000
0 0 0

distmatrix =
0 3.0000 4.2426
3.0000 0 3.0000
4.2426 0 0

distmatrix =
0 3.0000 4.2426
3.0000 0 3.0000
4.2426 3.0000 0

distmatrix =
0 3.0000 4.2426
3.0000 0 3.0000
4.2426 3.0000 0

zynparslanturk tarafından 7 yıl önce cevaplandı

Merhaba,
İlk olarak ben çok fazla bilgi sahibi değilim Matlab hakkında, ama bu kod üzerinden durumu açıklamaya çalışacağım. Sizin noktalarınız;
1.(0,0) 
2.(3,0) 
3.(3,3)
Uzaklık hesabını Pisagor teoreminden elde edilen,  formülü ile hesapladım.
Burada sonuç matrisini şöyle düşünebilirsiniz; 
 A=0              3.0000          4.2426
     3.0000     0                   3.0000
     4.2426     3.0000          0
A(1,1) : 1. noktanın 1. noktaya olan uzaklığı = 0
A(1,2) : 1. noktanın 2. noktaya olan uzaklığı =  3.0000
A(1,3) : 1. noktanın 3. noktaya olan uzaklığı = 4.2426
A(2,1) : 2. noktanın 1. noktaya olan uzaklığı = 3.0000
A(2,2) : 2. noktanın 2. noktaya olan uzaklığı = 0
A(2,2) : 2. noktanın 3. noktaya olan uzaklığı = 3.0000
A(3,1) : 3. noktanın 1. noktaya olan uzaklığı = 4.2426
A(3,2) : 3. noktanın 2. noktaya olan uzaklığı = 3.0000
A(3,3) : 3. noktanın 3. noktaya olan uzaklığı = 0
 
%===============================================================
İkinci soruda bahsettiğiniz durum kodun yapısından kaynaklanıyor. Kodda ilk olarak 3×3 boyutlu bir sıfır matrisi oluşturuyoruz. 
"  distmatrix=zeros(length(x));  "
Daha sonra "for döngüsü" ile bu 3x3lük sıfır matrisini dolduruyoruz. Döngü şeklinde ilerlediği için; önce (1,1) için işlem yapıp sonucu yazıyor, daha sonra (1,2) için işlem yapıp sonucu yazıyor. Döngüden dolayı da sonucu tek tek adım adım gösteriyor. 
 
Eğer; "  distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2)  " satırının sonunu ";" ile kapatırsanız ve kodun en sonuna distmatrix yazarsanız, size adımları değil, direk sonuç matrisini verecektir. Aşağıdaki şekilde;
 
clc, clear all,
x=[0 3 3];
y=[0 0 3];
distmatrix=zeros(length(x));
for ii=1:length(x)
for jj=1:length(x)
distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2);
end
end
distmatrix
 
Umarım yardımcı olur.

hlltrk tarafından 7 yıl önce cevaplandı

Merhaba anladim cok teşekkürler hem detayli anlatiminiz hem de cabucak cevapladiginiz icin cook teşekkürler ☺️

zynparslanturk tarafından 7 yıl önce cevaplandı

Çok sevindim :)

haritaci07 tarafından 6 yıl önce cevaplandı

Merhabalar.
x=rand(13,1);
y=rand(13,1);
distmatrix=zeros(length(x));

for ii=1:length(x)
for jj=1:length(x)
distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2)
end
end
Bu kodu uygularken rastgele değerler değilde excelde okutacağım 600 adet koordinat verisi için mesafe hesaplatacağım zaman önce x ve y leri dosya okutarak tanımlayıp
X=(600,1);
Y=(600,1); şeklinde mi yazdırmam gerekiyor?

haritaci07 tarafından 6 yıl önce cevaplandı

Merhabalar.
x=rand(13,1);
y=rand(13,1);
distmatrix=zeros(length(x));

for ii=1:length(x)
for jj=1:length(x)
distmatrix(ii,jj)=sqrt((x(ii)-x(jj))^2+(y(ii)-y(jj))^2)
end
end
Bu kodu uygularken rastgele değerler değilde excelde okutacağım 600 adet koordinat verisi için mesafe hesaplatacağım zaman önce x ve y leri dosya okutarak tanımlayıp
X=(600,1);
Y=(600,1); şeklinde mi yazdırmam gerekiyor?