Skip to main content

Octaviz'de 3B Grafik Çizilmesi

Octavın bir eklentisi olan octaviz ile çok şık 3 boyutlu grafikler çizdirmek mümkün. Örnek kodumuzda octaviz fonksiyonlarını kullanan ve bir dosyadan bilgileri okuyarak 3 boyutlu olarak çizdiren bir fonksiyon var.

En temel anlamda, bir malzemenin yansıma özelliğini tanımlayan fonksiyona BRDF deniliyor. Bu linkten de indirebileceğiniz data dosyasında, aluminyum bronz alaşımına belirli bir yerden ışık gönderildiğinde, malzeme üzerindeki yarım küre üzerinde tanımlı olan BRDF fonksiyonuna ait, R G ve B dalgaboyları için aldığı değerler bulunmakta.

Kodumuz bu bilgileri dosyadan okuyarak 3 boyutlu olarak çizdiriyor. Aşağıdaki kodu "plotBrdf.m" şeklinde kaydettiğiniz taktirde bu kodu komut satırından standart bir kod gibi çalıştırabilirsiniz.



function plotBrdf = plotBrdf(filename,color);
a=load(filename);
[theta,phi] = meshgrid(0:pi/64:pi/2,0:pi/64:2*pi);
r=ones(size(phi,2),size(theta,1));
ratio= min(a(:,3))/max(a(:,3))

if (ratio < 0.01)
for i=1:size(r,1)
for j=1:size(r,2)
if (color=='i') r(i,j)=log10((a((i-1)*size(r,2)+j,3))+(a((i-1)*size(r,2)+j,4))+(a((i-1)*size(r,2)+j,5)));
elseif (color=='r') r(i,j)=log10(3*a((i-1)*size(r,2)+j,3));
elseif (color=='g') r(i,j)=log10(3*a((i-1)*size(r,2)+j,4));
elseif (color=='b') r(i,j)=log10(3*a((i-1)*size(r,2)+j,5));
endif
endfor
endfor
r=transpose(r);
x = r .* sin(theta) .* cos(phi);
y = r .* sin(theta) .* sin(phi);
z = r .* cos(theta);
vtk_title('BRDF of the Sample Material in Log10 Scale');
elseif (ratio > 0.01 && ratio < 0.1)
for i=1:size(r,1)
for j=1:size(r,2)
if (color=='i') r(i,j)=log2((a((i-1)*size(r,2)+j,3))+(a((i-1)*size(r,2)+j,4))+(a((i-1)*size(r,2)+j,5)));
elseif (color=='r') r(i,j)=log2(3*a((i-1)*size(r,2)+j,3));
elseif (color=='g') r(i,j)=log2(3*a((i-1)*size(r,2)+j,4));
elseif (color=='b') r(i,j)=log2(3*a((i-1)*size(r,2)+j,5));
endif
endfor
endfor
r=transpose(r);
x = r .* sin(theta) .* cos(phi);
y = r .* sin(theta) .* sin(phi);
z = r .* cos(theta);
vtk_title('BRDF of the Sample Material in Log2 Scale');
else (ratio >= 0.01 && ratio < 0.1)
for i=1:size(r,1)
for j=1:size(r,2)
if (color=='i') r(i,j)=((a((i-1)*size(r,2)+j,3))+(a((i-1)*size(r,2)+j,4))+(a((i-1)*size(r,2)+j,5)));
elseif (color=='r') r(i,j)=(3*a((i-1)*size(r,2)+j,3));
elseif (color=='g') r(i,j)=(3*a((i-1)*size(r,2)+j,4));
elseif (color=='b') r(i,j)=(3*a((i-1)*size(r,2)+j,5));
endif
endfor
endfor
r=transpose(r);
x = r .* sin(theta) .* cos(phi);
y = r .* sin(theta) .* sin(phi);
z = r .* cos(theta);
vtk_title('BRDF of the Sample Material');
endif

vtk_surf(x,y,z);
%vtk_axis("off");
%vtk_print("deneme.png","-dpng");
endfunction


Fonksiyonun kullanımı da şu şekilde oluyor, plotBRDF("<data.dosyasının.adı>",'[i|r|g|b]'). Octavizde kurulu ise aşağıdaki gibi bir interaktif openGL ekranı çıkıyor karşınıza. Grafiğinizi bu ekranda döndürüp hareket ettirebiliyorsunuz.


Kodun sondan 2. satırında gösterilen vtk_print fonksiyonunu, openGL ekranı açıkken konsoldan manuel olarak çalıştırmak daha faydalı oluyor. Zira öncelikle figürü istediğiniz şekilde döndürüyorsunuz daha sonra görüntülüyorsunuz. vtk_print in ve diğer octave/octaviz fonksiyonlarının kullanımı için proje sayfalarındaki dokümanlara bakılması faydalı olacaktır.

Comments

Popular posts from this blog

LaTeX'te Sunum Hazırlamak

Latex'i kullanarak projeksiyon cihazlarında sunulmaya yönelik çok güzel sunumlar hazırlamak mümkün olmaktadır. Oluşturulan dosya PDF olduğundan ve her işletim sisteminde (linux, mac os, unix, windows vs.) en azından bir tane PDF okuyucu program olduğundan, hazırlanan sunumların taşınabilirliği de azami seviyede olmaktadır. Tabi ki latex'in en üstün olduğu nokta olan mükemmel fontlar ve matematiksel denklem yazılımları latex'te hazırlanan sunumlar için de geçerli olmaktadır. Aşağıdaki linklerden indireceğiniz pakette örnek sunuma ait gerekli dosyaları bulabilirsiniz. Daha ayrıntılı bilgi almak isterseniz bana ulaşabilirsiniz.
Link : DROPBOX

Hazırladığım örnek sunumun slaytları şu şekilde:





















Yılbaşına Nerede Girilmez - İzmir Narlıdere Naci Usta Restoran

Geçen hafta yılbaşı dolayısıyla eşim "iki senedir evdeyiz hadi bu sene dışarıya çıkalım yılbaşında" dedi. Bu fikir her ne kadar bu tarz mekanda eğlenme olayları beni açmasa da, bana da mantıklı geldi, bir değişiklik olur dedim, iki arkadaşım ve eşleri ile birlikte toplam 6 kişi yılbaşı gecesini bir makanda geçirmeye karar verdik. Şimdi hal böyle olunca tabi insan herşey tam olsun istiyor, o yüzden biz de İzmir'deki olası mekanları değerlendirip bir fiyat filtresinden geçirdikten sonra gördük ki, "yıldız tilbe ile yeni yıl coşkusu" tadındaki eğlenceler, şayet yıldız tilbeyi izlemeye gidip yıldız tilbeyi görmek istiyorsanız kişi başı yaklaşı 400 TL ye mal oluyor. Tabi biz de oha dedik. Sonra ayrı bir olası mekan grubu daha keşfettik, bu gruptaki fiyatlar 90 (limitli içecek) ila 150 tl (limitsiz içecek) arasında değişiyordu. Konum ve müşteri profili düşünülünce bu mekanların bize daha çok hitabedebileceğini düşündük. Sonra limitli içecek olayında vazgeçip limitsi…