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:
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.
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?
- https://it.mathworks.com/matlabcentral/answers/271133-3-dimensional-shortest-path
- https://it.mathworks.com/matlabcentral/fileexchange/55593-tortuosity—percolation—connected-path-calculation-for-3d-structures
Eğer bir gelişme olmazsa buraya yazın çözümü için dafa fazla mantık yürütmeye çalışalım.
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ı.