Soru sor3 Boyutlu Küp içindeki yolları gösterme ve en kısa yolu bulma
mertbasturk tarafından 7 yıl önce soruldu

Merhaba Arkadaşlar;
MATLAB üzerinden 3 boyutlu şekilde metaller üzerindeki korezyonun modellemesi üzerinde çalışıyorum.
Şu ana kadar 3 boyutlu şeklimi ve 3 boyutlu şekil üzerinde yatay, dikey ve katmanlar arasındaki çizgilerimi(yollarımı) otomatik yapan bir loop yaptım.
Bu çizgiler 1 ve 0 olarak temsil ediliyor. Eğer ki 1 varsa çizgi var, 0 varsa çizgi yok gibi. Porosity değeri kaç çizginin(1'in) olduğunu tanımlıyor. Yani porosity = 0.3 demek rastgele 10 değerin 3 tanesi 1, 7 tanesi 0'ı temsil ediyor.
Şu ana kadar yazdığım kod şu şekilde.

clc; clear all; close all;

Porosity = .3;
m=20;
n=20;
o=20;

Nodes= ones(m,n,o);
 HLines = zeros(m,n-1,o-1);
HLines(randperm(numel(HLines),floor(Porosity*m*(n-1)*(o-1))))=1;

HLines

VLines = zeros(m-1,n,o-1);
VLines(randperm(numel(VLines),floor(Porosity*(m-1)*n*(o-1))))=1;

VLines
 PLines = zeros(m-1,n-1,o);
PLines(randperm(numel(PLines),floor(Porosity*(m-1)*(n-1)*o)))=1;

PLines
 for i=1:m
 for j=1:n-1
 for k=1:o-1
 if HLines(i,j)==1;
 hold on
 x = [i i+1];
 y = [j j];
 z = [k k];
 plot3(x,y,z,'r','linewidth',2)
 end
 end
 end
end

for i=1:m-1
 for j=1:n
 for k=1:o-1
 if VLines(i,j)==1;
 hold on
 x = [i i];
 y = [j+1 j];
 z = [k k];
 plot3(x,y,z,'r','linewidth',2)
 end
 end
 end
end
 for i=1:m-1
 for j=1:n-1
 for k=1:o
 if PLines(i,j,k)==1;
 hold on
 x = [i i];
 y = [j j];
 z = [k+1 k];
 plot3(x,y,z,'r','linewidth',2)
 end
 end
 end
 end
 axis([0 m 0 n 0 o])
 view(30,45)
 set(gcf,'Position', [0 0 1500 1000])
 xlabel('X'); ylabel('Y'); zlabel('Z')

HLines yataydaki yolları, VLines dikeydeki yolları ve PLines katmanlar arası yolları(yani z ekseni) temsil ediyor.
Yazdığım kod ile elde ettiğim şekil şöyle:
3 boyutlu şeklde kodun görseli
Tepeden aşağıya giden tüm yolları göstermeye ve bu yolun/yolların hangileri en kısa şekilde zemine ulaştığını göstermek için bir sisteme ihtiyacım var. Bu konuda sizden yardım rica ediyorum, aklıma bu konu hakkında hiçbir şey gelmiyor.

İlgilenen herkese şimdiden teşekkür ederim.

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

Merhabalar,
Anladığım kadarı ile kafa karıştıran kısmı 3 eksenli bir yol üzerinde en kısa yolu bulmaya çalışmak. Yoksa 2 boyut için Dijkstra Algoritması çalışacaktır.
Araştırdığım kadarı ile aşağıda benzer soruları gördüm (İngilizce). Bunları denemiş miydiniz?

Eğer bir gelişme olmazsa buraya yazın çözümü için dafa fazla mantık yürütmeye çalışalım.
 

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

Merhaba Osman Bey,
,Ahmet hocanın kod dizimini kendi kod şekline döndürüp uygulamaya çalıştım fakat başarısız oldum.
Dijkstra algoritmasını da denedim.
Ya ben kendi yazdığım koda bu kodları ekleyemiyorum ya da başka bir çözüm olmalı.