تبلیغات
آموزش مطلب

تماس با من

نویسنده :امین باشی
تاریخ:پنجشنبه 12 خرداد 1390-10:15 ق.ظ

کرکره اش رو کشیدم پایین  پس لطفا کامنت نگذارید و برای تماس از رایانامه استفاده کنید.

matlabedu.ir [at] gmail.com



بستن پنجره

نویسنده :امین باشی
تاریخ:پنجشنبه 27 مرداد 1384-09:08 ق.ظ

با استفاده از ویژگی CloseRequestFcn می توان بسته شدن پنجره را كنترل كرد

بطور پیش فرض مقدار این ویژگی برابر با تابع closereq است.

get(gcf,'CloseRequestFcn')

 

با اجرای دستور فوق یك پنجره باز می‌شود و تابع get مقدار closereq را بر می‌گرداند

 

Fig=figure('CloseRequestFcn','a=2')

 

كاربرد این ویژگی كه به ذهن من می رسد ، ایجاد یك پیغام برای اطمینان از در خواست بستن پنجره می‌باشد.

همچنین می توان با بستن یك پنجره بفیه پنجره ها را نیز بست .

اگر دستور دوم را اجرا كرده‌اید حتما متوجه شده اید كه پنجره fig را نمی‌شود بست.شاید بخواهید

از مطلب خارج شوید اما این كار راهم نمی‌توانید بكنید.

نوع مطلب : figure 

پنچره دیوانه

نویسنده :امین باشی
تاریخ:سه شنبه 25 مرداد 1384-07:08 ق.ظ

یكی دیگر از ویژگی‌های تابع figure ، ویژگی ResizeFcn است. این ویژگی در هنگام تغیر دادن اندازه‌ی پنجره فعال می‌شود.

در هنگام ایجاد پنجره مطلب یا توجه به اندازه‌ی مانیتور شما اندازه‌ی پنجره را تغیر می‌دهد.

 figure('ResizeFcn','a=get(gcf,''position'');set(gcf,''position'',a/2);')

قبلا اشاره كرده بودم كه عبارت gcf به معنی پنجره جاری است.

عبارتی كه به ویژگی ResizeFcn تعلق می‌گیرد. می‌توند یك تابع داخلی ، اسم یك Mفایل یا هر عبارت مجاز دیگری باشد.



نوع مطلب : figure 

figure

نویسنده :امین باشی
تاریخ:دوشنبه 24 مرداد 1384-11:08 ق.ظ

قبلا اشاره كردم كه تابع figure ویژگی های زیادی دارد.امروز درمورد دوتا دیگه از اونها صحبت می كنیم.

WindowButtonUpFcn و WindowButtonDownFcn

این دو ویژگی كنترل كننده‌ی فشردن تكمه های موس بر روی پنجره هستند.

WindowButtonDownFcn: هنگامی كه تكمه موس را به پایین فشار دهید عمل می‌كند

WindowButtonUpFcn: هنگامی كه تكمه موس را ، رها كنید عمل می‌كند.

البته ویژگی دیگر هم وجود دارد (ButtonDownFcn)كه فقط با فشردن تكمه موس عمل می كند و حساسیتی در مورد رها كرن و فشردن ندارد.

 

figure('WindowButtonDownFcn','ezplot(''sin'')','WindowButtonUpFcn','ezplot(''cos'')')

 

اكثر توابع مطلب دارای ویژگی های مشتركی هستند. مثلا تابع axes هم ویژگی ButtonDownFcn را دارد

 

یادتون باشه كه هنگام فشردن تكمه موس حتما چند لحظه آن را نگه دارید و بعد از دیدن نتیجه آن را رها كنید



نوع مطلب : figure 

uipanel

نویسنده :امین باشی
تاریخ:چهارشنبه 19 مرداد 1384-04:08 ق.ظ

این تابع در نسخه‌ی جدید مطلب (Matlab 7) اظافه شده است.

در نسخه های قبلی با اسفاده از تابع uicontrol و رابط(user interface) frame قسمتی از توانایی های  این تابع فالبل دسترسی بود.

h = figure;

     hp = uipanel('Title','Main Panel','FontSize',12,...

             'BackgroundColor','white',...

             'Position',[.25 .1 .67 .67]);

     hsp = uipanel('Parent',hp,'Title','Subpanel','FontSize',12,...

              'Position',[.4 .1 .5 .5]);

     hbsp = uicontrol('Parent',hsp,'String','Push here',...

              'Position',[18 18 72 36]);

Uipanel در حقیقت با یك ناحیه(frame) قسمتی از یك پنجره را مشخص می كند.

این ناحیه می‌تواند شامل یك uipanel  دیگر، محور و .... باشد. این ناحیه به عنوان یك پدر(parent) برای زیرمجموعه های(children) خود است.

در مثال بالا پنجره‌ی ایجاد شده شامل یك پنل اصلی با رنگ سفید

یك زیر پنل و یك تكمه می‌باشد .

نكته:تابع uicontrol در حالت پیش فرض ایجاد كننده‌ی یك push button است.

با استفاده از ویژگی parent می‌توان این تابع را به عنوان زیر مجموعه‌ی یك figure یا یك uipanel  دیگر معرفی كرد.

برای زیر مجموعه‌های یك uipanel ویژگی position نسبت به خود پنل تعین می شود.



نوع مطلب : uipanel 

uicontrol

نویسنده :امین باشی
تاریخ:شنبه 15 مرداد 1384-05:08 ق.ظ

function test_uicontrol

h_figure=figure('unit','normal','pos',[.1 .5 .1 .2],'menubar','none');

h_toggle1=uicontrol('style','toggle','unit','normal',...

    'position',[.05 .05 .9 .275],'string','sin','Callback','figure(2);ezplot(''sin'')');

h_toggle2=uicontrol('style','toggle','unit','normal',...

    'position',[.05 .375 .9 .275],'string','tan','Callback','figure(2);ezplot(''tan'')');

h_toggle3=uicontrol('style','toggle','unit','normal',...

    'position',[.05 .7 .9 .275],'string','log','Callback','figure(2);ezplot(''log'')');

 

تابع uicontrol برای ایجاد رابط(user interface)  استفاده می شود. مطلب انواع متنوعی از این رابط ها را پشتیبانی می كند.

Check boxes

 Editable text fields

List boxes

Pop-up menus

 Push buttons

 Radio buttons

 Sliders

Static text labels

 Toggle buttons

 

Toggle buttons

مثال بالا طریفه استفاده از آنها را نشان می دهد.

نكته ی مهم در اسفاده از این رابط ها ، استفاده ی صحیح از ویژگی callback است.این ویژگی می توند یك یا چند دستور مطلب یا یك تابع داخلی باشد.

در خیلی از موارد به خصوص در نوع  editable text fields باید از اطلاعات وارد شده توسط كابر استفاده كرد.كه این كار توسط یك تابع كه بوسیله برنامه نویس نوشته شده انجام می گیرد.

 

 

function test_uicontrol2

global h_edit;

global h_figure;

h_figure=figure('unit','normal','pos',[.1 .5 .1 .2],'menubar','none');

h_edit=uicontrol('style','edit','unit','normal',...

    'position',[.1 .4 .8 .3],'string','sin');

h_text=uicontrol('style','text','unit','normal',...

    'position',[.1 .72 .8 .1],'string','sin,tan,log');

h_toggle=uicontrol('style','toggle','unit','normal',...

    'position',[.1 .05 .8 .275],'string','ply','Callback',@play);

function str=string_callback(hObject, eventdata, handles)

  str=get(hObject,'string');

function play(hObject, eventdata, handles)

  global h_edit;

  global h_figure;

  str= string_callback(h_edit,[],h_figure);

  if strcmp(str,'sin')

      figure(2);

      ezplot('sin')

  elseif strcmp(str,'tan')

      figure(2)

      ezplot('tan')

  else

      figure(2)

      ezplot('log')

  end

     



نوع مطلب : uicontrol 

ساعت

نویسنده :امین باشی
تاریخ:سه شنبه 11 مرداد 1384-08:08 ق.ظ

function testxdata

fig=figure('unit','normal','color','k');

h=line([0 0],[0 .5],'color','w');

h1=line([0 0],[0 .7],'color','b');

h2=line([0 0],[0 1],'color','y');

axis square

axis off

x=linspace(0,2*pi,60*60*12);

x1=linspace(0,2*pi,60*60);

x2=linspace(0,2*pi,60);

axis([-1.5 1.5 -1.5 1.5])

hold on

k=0;

k1=0;

k2=0;

 

h_text=uicontrol('pos',[235 30 100 25],'BackgroundColor',[.4 .5 .5],'style','text',...

    'FontUnits','normal','FontSize',.9 )

while ishandle(fig)

    k1=k1+1;

    k=k+1;

    k2=k2+1;

    if k==length(x)

        k=1;

    end

    if k1==length(x1)

        k1=1;

    end

    if k2==length(x2)

        k2=1;

    end

    set(h,'ydata',[0 cos(x(k))*.5])

    set(h,'xdata',[0 sin(x(k))*.5])

 

    set(h1,'ydata',[0 cos(x1(k1))*.7])

    set(h1,'xdata',[0 sin(x1(k1))*.7])

 

    set(h2,'ydata',[0 cos(x2(k2))])

    set(h2,'xdata',[0 sin(x2(k2))])

   

    time=[num2str(floor(k/(60*60))) ':' num2str(floor(k1/(60))) ':' num2str(floor(k2))];

    set(h_text,'string',time)

    drawnow

   

End

تابع line  یك خط مستقیم رسم می كند. شكل(format)  استفاده از این تابع به مانند تابع figure است .

حتی بسیار یاز ویژگی های این دو تابع یكسان است.

line(X,Y)

line(X,Y,Z)

line(X,Y,Z,'PropertyName',PropertyValue,...)

line('PropertyName',PropertyValue,...) low-level-PN/PV pairs only

h = line(...)

 

دستور اول یك خط در مختصات 2 بعدی رسم می كند.

دستور دوم همین كار ار در مختصات 3 بعدی انجام می دهد.

با استفاده از تابع linspace می توان یك بازه دلخواه را به تعداد مشخص تقسیم كرد.

 

تابعuicontrol  برای ایجاد شی (object) استفاده می شود.

Check boxes

Editable text fields

 List boxes

 Pop-up menus

 Push buttons

 Radio buttons

 Sliders

Static text labels

 Toggle buttons

در اینجا ما از نوع static text استفاده كرده ایم.

استفاده از این تابع را بعدا بطور كامل شرح خواهم داد.

تابع ishandle برای چك كردن وجود  پنجره ای با دستگیره ی ذكر شده  بكار می رود. باز گذاشتن این شرط می توان با بستن پنجره به حاقه پایان داد.

Xdata,Ydata,Zdata در حقیقت مختصات نقاط ابتدا و انتهای خط در هر محور است.

 

دستور drawnow برای بهنگام نمودن پنجره مرد استفاده قرار می گیرد. بطور كلی در هنگام متحرك سازی

بعد از هر مرحله رسم باید cpu را آزاد كرد .

x=1:1000;

y=x^2+3;

for i=1:1000

     plot(x(i),y(i));

end

 

%%%%%%%%%%%%%%

x=1:1000;

y=x^2+3;

for i=1:1000

     plot(x(i),y(i));

pause(.01)

end

 

 

 

 

 

 

 



نوع مطلب : line 

تمرین تیر اندازی

نویسنده :امین باشی
تاریخ:دوشنبه 3 مرداد 1384-11:07 ق.ظ

بحث ویژگی های نابع figure را با یك مثال ادامه می دهم

 

clc

close all

udata=struct('color',[.2 .3 .4],'unit','normal','pos',[.5 .5 .075 .12],'menubar','none',...

    'name','fig','NumberTitle','off','resize','off','WindowStyle','modal');

hfigure=figure(udata,'UserData',udata);

rectangle('Position',[.5,.5,.5,.5],'Curvature',[1,1],'FaceColor','r')

rectangle('Position',[.55,.55,.4,.4],'Curvature',[1,1],'FaceColor','b')

rectangle('Position',[.6,.6,.3,.3],'Curvature',[1,1],'FaceColor','w')

rectangle('Position',[.65,.65,.2,.2],'Curvature',[1,1],'FaceColor',[.5 .2 .1])

rectangle('Position',[.7,.7,.1,.1],'Curvature',[1,1],'FaceColor',[.4 .9 .2])

axis('off')

p=0;

for i=1:3 

[x,y] = ginput(1);

x0=.75;

y0=.75;

erx=abs(x-x0);

ery=abs(y-y0);

er=sqrt(erx^2+ery^2);

if er <= .05

    px=10;

elseif er <= .1

    px=9;

elseif er <= .15

    px=8;

elseif er <= .2

    px=5;

elseif er <= 25

    px=3;

else

    px=0;

end

p=px+p;

end

ud=get(hfigure,'UserData');

set(gcf,'Visible','off')

ps=num2str(p);

msg0='ur piont is ';

msg=[msg0 ps];

msgbox(msg,'createMode','modal')

 

دستور clc فرمان پاك كردن command window است. با اجرای خط دوم،  تمام پنجره های باز شده(اگر وجود داشته باشند)  بسته می شوند.

دستور struct یك آرایه از همین نوع تعریف می كند. یك  structureیك آرایه شامل فیلدها و مفدایر آنهاست.در اینجا با استفاده از structure ویژگی های تابع figure  را تعین می كنیم.

Color مشخص كننده ی رنگ پنجره می باشد كه  توسط یك بردار RGB تعین می شود. مقادیر این بردار باید بین[0 1]  باشد. درایه اول رنگ قرمز دو.می سبز و سومی آبی است.

Menubar  كنترا كننده ی منو بالای صفحه می باشد.  ویژگی Menubar دارای دو مقدار none و figure می باشد. به طور پیش فرض مفدار این ویژگی برابر با figure است .

Name برای تعین اسم پنجره به كار می رود . در صورت استفاده نكردن از آن ، مطلب نامی  برای پنجره در  نظر نمی گیرد.

NumberTitle برای نمایش دادن یا ندادن شماره ی پنجره بكار می رود ودر حالت پیش فرض برابر با on  است.

Resize  مشخص كننده امكان یا عدم امكان تغیر اندازه پنجره است. در حالت پیش فرض برابر با on است.

WindowStyle حتما تا حالا پنجره هایی را دیده‌اید كه بر روی همه پنجره ها قرار می گیر و تا وقتی كه بسته نشده اند ، اجازه ی كار دیگری را نمی دهند. این ویژگی درای دو مقدار modal

(روی همه پنجره ها قرار می گیرد.) و normal  است.

 

Userdata . مطلب از این ویژگی هیچ استفاده ای نمی كند. شما هر چیزی را كه دوست داشته یاشید می توانید در این متغیر قرار دهید. ممكن است در نظر اول هیچ اسفاده ای برای این ویژگی پیدا نكنید.اما كاربرد زیادی می توانید برای آن پیدا كنید. در اكثر demo های مطلب این ویزگی كابرد زیادی  دارد.

 

تابع rectangle برای رسم مستطیل و دایره مورد استفاده قرار می گیرد.

 

تابع axis كاربرد وسیعی برای رسم محور های مخنصات دارد. بعدا به این تابع می پردازم. فقط همین رو بگم مه این دستور به این شكل جلوی نمایش محور ها را می گیرد.

 

توابع set و get  برای تعین یا بدست آوردن ویژگی ها توابع مورد استفاده قرار می گیرند.

در اینجا از تابع get   برای بدست آوردن مفدار ویژگی userdata از تابع figure استفاده كرده ایم.

از تابع set  برای تعین ویژگی Visible از تابع figure استفاده كردم. ویژگی Visible درای دو مفدار on  و off  است.

تابع gcf مقدار دسگیره پنجره جاری را بر می گرداند. در جایی كه دسگیره پنجره را نداشته باشیم از آن استفاده می كنیم.

 

تابع msgbox برای نمایش یك پیغام بكار می رود. كه در اینجا نوع پنجره باز شده را از نوع modal تعریف كرده ایم.



نوع مطلب : figure 

UIContextMenu

نویسنده :امین باشی
تاریخ:یکشنبه 26 تیر 1384-10:07 ق.ظ

p class=MsoNormal dir=LTR style='text-align:left;direction:ltr;unicode-bidi: embed'>UIContextMenu

با استفاده از این ویژگی می‌توان توسط راست كلیك پنجره را بهتر كنترل كرد.

مثال)

از منوی file گزینه new وM-file را انتخاب كنید.

با استفاده از M-file  می توان دستورات مطلب را در قابل یك برنامه نوشت. M-file ها به دو دسته‌ی

M-file scripts  و M-file functions تقسیم می شوند.

M-file هایی كه كلمه‌ی function در ابتدای آنها باشد از نوع M-file functions می باشند كه تفاوت های یسیاری با نوع دیگر دارند.

در M-file باز شده دستورات زیر را بنوسید.

function ex1

hfigure = figure;

cmenu = uicontextmenu;

item1 = uimenu(cmenu, 'Label', 'sin', 'Callback',@f1 );

item2 = uimenu(cmenu, 'Label', 'log', 'Callback',@f2 );

item3 = uimenu(cmenu, 'Label', 'tan', 'Callback',@f3 );

set(hfigure,'UIContextMenu', cmenu)

function f1(obj,eventdata)

ezplot('sin')

grid on

function f2(obj,eventdata)

ezplot('log')

grid on

function f3(obj,eventdata)

ezplot('tan')

grid on

در سطر اول M-file را از نوع M-file functions تعریف كردیم.

در سطر سوم متغیر cmenu را به عنوان دستگیره‌ی تابع uicontextmenu قرار دادیم.

تابع uimenu باری ایجاد منو بكار می‌رود.

توابع uicontextmenu و uimenu  را در مباحث آینده بطور كامل توضیح می دهم.

سطر های 4و5و6 یك منو از نوع راست كلیك (uicontextmenu) با سه گزینه تولید می كند.

سطر 7 مقدار ویژگی UIContextMenu ، از پنجره‌‌ی hfigure را تعین می كند.

كه در این مثال یك منو با سه گزینه می باشد.

در سطرهای 4و5و6 در جلوی عبارت Callback مقدار @f* قرار داده شده است.

ویژگی Callback مشخص كننده ی تابع یا اسكریپت فراخوانی شده توسط uimenu در صورت انتخواب كردن هر گزینه می باشد.

قرار دادن علامت @ یعنی تابع f* تابع داخلی تابع ex1 است.

 

پس ازذخیره‌ كردن این فایل كه همنام با اسم تابع اصلی (ex1) است و اجرای آن یك پنجره باز شده كه در ابتدا به رنگ خاكستری است. با راست كلیك كردن بر روی آن می توانید نمودار سه تابع sin,log,cos را رسم كنید.

 

حتما تاحالا متوجه شده ‌اید كه پس از رسم یكی از این توابع ، راست كلیك كردن بر روی نموادر كاری انجام نمی دهد.اما اگر بر روی قسمت های خاكستری راست كلیك كنید ، همان منوی قبلی باز می شود.

علت آن این است كه هنگام رسم نمودار یك axes (محور مختصات)  رسم شده كه عمل كشیدن در آن انجام می شود.axes در حقیقت یكی از زیر مجموعه های (Children) تابع figure است.

برای اینكه بتوان بر روی نمودار(فضای مشخص شده توسط محورهای مختصات)از راست كلیك استفاده كرد

باید منو را برایش تعریف كرد.

مثال)

function ex1

global hfigure

hfigure = figure;

cmenu = uicontextmenu;

item1 = uimenu(cmenu, 'Label', 'sin', 'Callback',@f1 );

item2 = uimenu(cmenu, 'Label', 'log', 'Callback',@f2 );

item3 = uimenu(cmenu, 'Label', 'tan', 'Callback',@f3 );

set(hfigure,'UIContextMenu', cmenu)

function f1(obj,eventdata)

clf

global hfigure

haxes=axes;

cmenu = uicontextmenu;

item1 = uimenu(cmenu, 'Label', 'sin', 'Callback',@f1 );

item2 = uimenu(cmenu, 'Label', 'log', 'Callback',@f2 );

item3 = uimenu(cmenu, 'Label', 'tan', 'Callback',@f3 );

set(gca,'UIContextMenu', cmenu)

set(hfigure,'UIContextMenu', cmenu)

ezplot('sin')

function f2(obj,eventdata)

clf

global hfigure

haxes=axes;

cla reset

cmenu = uicontextmenu;

item1 = uimenu(cmenu, 'Label', 'sin', 'Callback',@f1 );

item2 = uimenu(cmenu, 'Label', 'log', 'Callback',@f2 );

item3 = uimenu(cmenu, 'Label', 'tan', 'Callback',@f3 );

set(gca,'UIContextMenu', cmenu)

set(hfigure,'UIContextMenu', cmenu)

ezplot('log')

function f3(obj,eventdata)

clf

global hfigure

haxes=axes;

cmenu = uicontextmenu;

item1 = uimenu(cmenu, 'Label', 'sin', 'Callback',@f1 );

item2 = uimenu(cmenu, 'Label', 'log', 'Callback',@f2 );

item3 = uimenu(cmenu, 'Label', 'tan', 'Callback',@f3 );

set(gca,'UIContextMenu', cmenu)

set(hfigure,'UIContextMenu', cmenu)

ezplot('tan')

 

بعد از این كار متوجه می شوید كه راست كلیك بر روی خود نمودار عمل نمی كند .

حل این مشكل به عهده ی خود شماست.

نا یادم نرفته بگم كه تا می نوانید از global  استفاده نكنید.چون برنامه رو زشت می كند.

ترجیحا متغیرهای لازم را به عنوان آرگومان به درون توابع بفرستید.



نوع مطلب : figure 



  • تعداد صفحات :10
  • ...  
  • 6  
  • 7  
  • 8  
  • 9  
  • 10  


All right reserved©2005 Amin Bashi