متلب عموما به عنوان برنامه ای شناخته می شود که کاربردهای بسیاری داشته و در زمینه رسم نمودارها – پردازش و داده کاوی مورد استفاده قرار میگیرد. در این برنامه میتوان علاه بر مواردی مانند داده کاوی – رسم نمودارها و معلادلات ریاضی – پردازش های تصاویر و غیره میتوان اشکال فانتزی مانند قلب را نیز رسم کرد یا انیمیشن ساخت. تنها با استفاده از چند فرمول ساده شما میتوانید انیمیشن خود را در متلب بسازید !
در این متلب ما قصد داریم شیوه رسم یک قلب سه بعدی در برنامه متلب را آموزش دهیم. برای این منظور به دلیل سه بعدی بودن به سه مولفه x,y,z نیازمندیم و به کمک دستورهای linspace – ndgrid و isosurface شکل فانتزی خود را رسم میکنیم. قبل از رسم باید فرمول ریاضی شکل مورد نظر را بدانیم. فرمول شکل قلب در ریاضی به صورت زیر می باشد :
همانطور که مشاهده میکنید برای هر سه مولفه x,y, z بازه بین 3- تا 3 تعیین شده است. بنابراین به هنگام رسم بازه مورد نظر را بین 3- و 3 برای هر سه مولفه تعیین میکنیم. سپس فرمول ریاضی مورد نظر را به متلب تبدیل میکنیم. اگر فرمول ریاضی نمودار قلب را به متلب تبدیل کنیم در این صورت فرمول به صورت زیر خواهد بود :
F=((-(X.^2) .* (Z.^3) -(9/80).*(Y.^2).*(Z.^3)) + ((X.^2) + (9/4).* (Y.^2) + (Z.^2)-1).^3);
در اینجا برای تعیین بازه ها از دستور linspace استفاده میکنیم تا بازه مورد نظر برای هر سه مولفه را تعیین کنیم.
x=linspace(-3,3,n);
y=linspace(-3,3,n);
z=linspace(-3,3,n);
بازه مورد نظر بین 3- تا 3 برای هر سه مولفه هست. حال از برنامه میخواهیم تا هر سه مولفه را به هنگام رسم در نظر بگیرد و انها را رسم کند برای این کار از دستور ndgrid کمک میگیریم :
[X,Y,Z]=ndgrid(x,y,z);در صورتی که بخواهیم رنگ قلب را تعیین کنیم باید از مجموعه رنگ colormap در متلب نام دسته رنگ مورد نظر را بدانیم. به عنوان نمونه ما رنگ قلب مورد نظر را آبی در نظر میگیریم. این رنگ در دسته cool قرار دارد.
n=100;
x=linspace(-3,3,n);
y=linspace(-3,3,n);
z=linspace(-3,3,n);
[X,Y,Z]=ndgrid(x,y,z);
F=((-(X.^2) .* (Z.^3) -(9/80).*(Y.^2).*(Z.^3)) + ((X.^2) + (9/4).* (Y.^2) + (Z.^2)-1).^3);
isosurface(F,0)
lighting phong
caxis
axis equal
colormap(‘cool’);
view([50 34]);
در صورتی که بخواهیم رنگ آن قرمز باشد باید در دستور colormap رنگ دسته قرمز که flag می باشد را انتخاب کنیم در این صورت خواهیم داشت :
n=100;
x=linspace(-3,3,n);
y=linspace(-3,3,n);
z=linspace(-3,3,n);
[X,Y,Z]=ndgrid(x,y,z);
F=((-(X.^2) .* (Z.^3) -(9/80).*(Y.^2).*(Z.^3)) + ((X.^2) + (9/4).* (Y.^2) + (Z.^2)-1).^3);
isosurface(F,0)
lighting phong
caxis
axis equal
colormap(‘flag’);
view([50 34]);