تغییر رنگ نمودار سه بعدی در متلب
نویسنده : محمد پارسایی | زمان انتشار : 12 اسفند 1399 ساعت 13:26
نرم افزار Matlab یکی از پر کاربردترین نرم افزارهایی است که در رشتههای مختلف از جمله مهندسی برق، مکانیک، رایانه و… کاربرد بسیاری دارد. واژه متلب از ترکیب دو واژه MATrix (ماتریس) و LABoratory (آزمایشگاه) ایجاد شدهاست.
کار کردن با ماتریسها در متلب بسیار ساده است. در حقیقت تمام دادهها در متلب به شکل یک ماتریس ذخیره میشوند.
در این قسمت ما قصد داریم تا با نحوه رسم نمودار سه بعدی در این نرم افزار آشنا شویم.
– خمهاي فضايي- تابع plot3
با استفاده از تابع plot3 در متلب ميتوان يک منحني را در فضاي سهبعدي ترسيم کرد. روش استفاده از اين تابع بسيار شبيه تابع plot است. جز اينکه بازاي هر منحني به سه بردار هم طول نياز است.
مثال: رسم يک فنر با شعاع برابر با يک:
x=t
y= sin(t) t Î R
z=cos(t)
>>t=0: pi/50:10*pi; >>plot3(sin(t) , cos(t) , t); xlabel(‘sin(x)’); ylabel(‘cos(x)’); zlabel(‘x’)
– تغيير زاويه ديد
با استفاده از دکمه فشاري Rotate 3D بر روي هر پنجره شکل متلب و يا با استفاده از دستور view مي توان زاويه ديد را تغيير داد. همچنين در منوي Tools با استفاده از زيرمنوهاي Camera Motion مي توان در فضاي سهبعدي حرکت کرد.
شکل کلي استفاده از دستور view بصورت زير است:
view([az , el])
که در اين رابطه az و el بترتيب زاويه دوربين نسبت به صفحه xy و بخش منفي محور y است.
-نمودارهاي شبکهاي: توابع mesh, meshc, meshz
با استفاده از اين توابع ميتوان سطوح شبکهاي(يا توري) ايجاد کرد.شکل کلي استفاده از تابع mesh بصورت زيراست:
mesh(x,y,z)
که در اين رابطه z تابعي دو متغيره از متغيرهاي x و y ميباشد. بنابراين لازم است که z يک ماتريس دو بعدي باشد که تعداد سطرهاي آن برابر با تعداد عناصر y و تعداد ستونهايش برابر با تعداد عناصر x باشد. x و y بايد بردار باشند اگرچه مي توانند ماتريسهايي همبعد نيز باشند بدينصورت که بردار x به تعداد عناصر بردار y بصورت سطري تکرار شود و بردار y به تعداد عناصر x بصورت ستوني تکرار گردد. که در اينصورت دو ماتريس همبعد خواهيم داشت. تابع meshgrid مي تواند اين عمل را انجام دهد:
[x_new,y_new]=meshgrid(x,y);
تابع meshc علاوه بر نمودار شبکهاي، نمودارهاي تراز را نيز رسم ميکند.
تابع meshz ديوارههايي را در پايين نمودار به سمت صفحه x-y رسم ميکند.
مثال 1 : تابع peaks يکي از توابع متلب است که يک مدل رياضي از پيشتعريف شده را ايجاد ميکند:
>> [x ,y,z]= peaks(30); >> mesh(x,y,z);
مثال 2 : رسم يک تابع دو بعدي به فرمول z=sin(r)/r که r=sqrt(X^2 + Y^2)
>>x=-7.5: 0.5: 7.5; y=x; >> [x_new,y_new]=meshgrid(x,y); >> r = sqrt(x_new.^2 + y_new.^2) + eps; >>z=sin(r) ./ r; mesh(x_new , y_new , z) يا: mesh(x,y,z);
به صورت پیشفرض متلب نقاطی از نمودار سهبعدی که پشت نقاط جلویی قرار گرفتهاند را مخفی میکند. با استفاده از تابع hidden میتوان این رفتار را تغییر داد:
>>hidden off >> hidden on >> hidden
– نمودارهاي رويه: surfو surfl و surfc
تفاوت نمودارهاي رويه با نمودارهاي شبکهاي آن است که در اينجا بجاي خطوط شبکهاي، وصلهها يا فواصل بين شبکهها ترسيم ميگردد.
تابع surf دقيقا مانند تابع mesh بکار برده ميشود.
تابع surfl علاوه بر تواناييهاي تابع surf ميتواند خصوصيات نوردهي شيء سهبعدي را نيز تنظيم کند. از قبيل جهت منبع نوري و خصوصيات انعکاسي شيء
تابع surfc مانند تابع meshc عمل ميکند
تابع shading :
با استفاده از تابع shading ميتوان نوع سايهرنگ نمودار را تعيين کرد. اين تابع بايد پس از يکي از توابع surf بيايد و با يکي از سُه پارامتر زير قابل فراخواني است:
shading flat
shading interp
shading faceted
تابع colormap :
با استفاده از اين تابع ميتوان رنگهاي بکار برده شده براي ترسيم نمودار رويه را تعريف کرد تنها پارامتر مورد نياز ميتواند يکي از ثابتهاي زير باشد:
hsv, cool , hot, prism, gray
چرخش دوربین در فضای سه بعدی
با استفاده از تابع camorbit میتوان پس از رسم نمودار سهبعدی، زاویه دید دوربین نسبت به شیء را تغییر داد:
camorbit(theta,phi)
theta: زاویه چرخش افقی
phi: زاویه چرخش عمودی
و یا میتوانید از این فرم تابع استفاده کنید:
camorbit(theta,phi,’محور چرخش’);
آرگومان سوم محوری است که چرخش حول آن انجام میشود را مشخص میکند که به صورت پیشفرض محور z است.
مثال:
surf(peaks) axis vis3d axis off for i=1:360 camorbit(2,0,'data') drawnow end
– تعیین موقعیت دوربین
به منظور تعیین موقعیت دوربین میتوان از تابع campos استفاده کرد:
campos([x,y,z]) آرگومان ورودی این تابع موقعیت دوربین را در فضای سهبعدی مشخص میکند.
مثال:
surf(peaks) axis vis3d off for x = -200:5:200 campos([x,5,10]) drawnow end
– نمایش میلهرنگ
با استفاده از تابع colorbar میتوان پس از نمایش نمودار، رنگهای بکار برده شده در آن را بصورت یک میلهرنگ در کنار نمودار نمایش داد:
>> surf(peaks) >> colorbar
اعداد نمایش داده شده در کنار میلهرنگ مقداری را که هر رنگ به آن اشاره میکند(به صورت پیشفرض مقدار z) را نمایش میدهد.
– نمودارهاي تراز-contour , contour3
نمودارهاي تراز خطوط و منحنيهاي بستهاي ميباشند که براي نمايش ارتفاعهاي مختلف يک نمودار سهبعدي، در فضاي دوبعدي يا سهبعدي بکار برده ميشوند. در اين نمودارها، نواحي همارتفاع توسط خطوطي به يکديگر متصل ميشوند.
نحوه استفاده از توابع contour و contour3 نيز دقيقا شبيه تابع mesh است.
مثال:
[c,h] = contour(peaks); clabel(c,h), colorbar
– تابع pcolor
این تابع دادههای مربوط به یک نمودار سهبعدی را در فضای دوبعدی رسم میکند و برای نمایش ارتفاع(مقدار z) از تغییرات رنگ استفاده مینماید. نتیجه حاصل از این تابع ، مشابه تصویر از بالای تابع surf است.
مثال ۱:
>>pcolor(peaks)
مثال ۲:
t=tril(ones(10)); ts=[t,fliplr(t)]; tss=[flipud(ts);ts]; pcolor(tss); colormap(gray(2))
– اجراي برنامههاي نمايشي متلب در زمينه ترسيم سهبعدي
demo هاي Graphics در متلب راهنماي بسيار خوبي براي آموزش قابليتهاي گرافيکي متلب ميباشد. اين برنامهها از منوي Start متلب در شاخه Demo-> Graphics در دسترسند.
منبع: sabzdanesh.com