تبلیغات
آموزش مطلب - مطالب مرداد 1384

آموزش مطلب

دوشنبه 31 مرداد 1384

یك مقدار هم در مورد ساختار درختی اشیا گرافیكی در مطلب صحبت  كنم. ادرس زیر را در command window وارد كنید . منظور از matlabroot محل نصب مطلب است.

web('jar:file:mathlabroot/help/techdoc/help.jar!/creating_plots/hg_obje2.html', '-helpbrowser')

 

ریشه این درخت كه دستگیره ی آن (handle) عدد 0 است root نام دارد .

یك پله بالاتر figure ها قرار دارند. كه به عنوان زیرمجموعه(childrens) برای root و root پدر (parent) آنهاست.

در پله بعد درخت به سه شاخه تقسیم می شود.axes و .....

نكنه مهم در این ساختار آن است كه مثلا برای ایجاد یك شی از نوع core  یك محور(axes) نیاز است و خود محور نیاز به figure دارد.البته همه این ها با توجه به مفادیر پیش فرض ایجاد می شود.و یادتان باشد كه شما می توانید برای كنترل بهتر خودتان آنها را ایجاد كنید.

ما معمولا با root كاری نداریم مگر آنكه چندین پنجره باز باشد و بخواهیم آنها را كنترل كنیم.

Findobj(0)

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

 

 

>> findobj(0)

 

ans =

 

     0

 

 

>> figure

>> findobj(0)

 

ans =

 

     0

     1

 

 

>> figure

>> plot([1])

>> findobj(0)

 

ans =

 

         0

    1.0000

  151.0021

  152.0026

در این حالت عدد 0 نشان دهنده‌ی  root

عدد 1 دستگیره‌ی (handle) پنجره  

عدد سوم دستگیره‌ی محور

و عدد آخر نشان دهنده‌ی دستگیره‌ی تابع plot است.

اینم بگم كه تابع plot از نوع core است .

 



[ دوشنبه 31 مرداد 1384 - 08:08 ق.ظ ]
[ویرایش شده در : - - -]

[ پیام ()|| امین باشی ] [Organization of Graphics Objects , ] [+]

نشانگر فشار

یکشنبه 30 مرداد 1384

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

 این نشانگر یك پیكان آبی برای نشان دادن set point و یك پیكان قرمز برای نشان دادن فشار لازم دارد.

بهتره شروع كنیم

اول باید یك نوار عمودی برای اندازه‌ گیری فشار طراحی كنیم.

a=axes('position',[.4 .1 .2 .8],'box','on','yMinorTick','on','YGrid','on');

اگر مطلب قبلی رو خوانده باشید حتما می‌توانید بگویید این دستور چه كاری می‌كند.

axis([0 .5 -5 105])

hold on

الان بك كادر داریم كه از در محو y از 0 تا 100 شماره گذاری شده.كاره تابع hold  این است كه اندازه كادر را برای ما حفظ می كند.

فكر نمی كنم محور x  نیاز به شماره گذاری داشته باشد. مقداری كه به ویژگی xtick نسبت می‌دهیم باید ماتریس عددی باشد.

set(a,'XTick',[])

حالا باید پیكان ها را بكشیم اما فبل از اون برای هر پیكان یك محور تعریف می كنیم ولی آنها را نمایش نمی دهیم.

a1=axes('position',[.5 .1 .1 .8],'Visible','off' );

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

axis([0 .5 0 1])

hold on

با استفداه از دستور axis محور x را در فاصله‌ی 0 تا 0.5 تعرف كردیم. اما یادمان باشد كه این محور نمایش داده نمی‌شود

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

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

area(Y)

area(X,Y)

area(...,basevalue)

area(...,'PropertyName',PropertyValue,...)

area(axes_handle,...)

h = area(...)

area('v6',...)

كار این دستور این است كه یك ناحیه رنگی ایجاد می كند به این شكل كه با تجه به نقاط داده شده به آن فاصله‌ی 0 تا آن نقاط را پر می‌كند.

 اگر از شكل اول دستور استفاده شود داریه های ماتریس را در مقابل شماره‌ی اندیس آن رسم می‌كند.

در شكل دوم ماتریس اول نشانن دهنده‌ی مقدار x  نقاط و ماتریس دوم y است.

اگر بخواهید این ناحی رنگی را از جای دیگری بجز 0 رسم كنید با ویژگی BaseValue می توانید ای كا را انجام دهید.

p=area([.1 .125 .15],[.2 .4 .2],'FaceColor','r');

همین كا را برای پیكان set piont  انجام می دهیم.

a2=axes('position',[.4 .1 .1 .8],'Visible','off');

axis([0 .5 0 1])

hold on

p_set=area([0.1 .125 .15],[.2 .4 .2],'FaceColor','b');

الان باید هر كدام از پیكان ها را در جای خود قرار دهیم.

 

axes(a1)

view(-90,90)

و پیكان بعدی

axes(a2)

view(90,90)

دستور axes(a1) محور جاری را به محو a1 تغیر می‌دهد .

و اما دستور view با استفاده از این دستور می‌توان محور ها را چرخاند.شكل این دستور به صورت های زیر است.

view(az,el)

view([az,el])

view([x,y,z])

view(2)

view(3)

view(T)

 

[az,el] = view

T = view

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

Az  مقدار زاویه‌ی  چرخش در جهت عقربه های ساعت است و el  زاویه چرخش حول محور x است.

هنگامی كه یك محر ایجاد می‌شود مقدار az, el را می توان با دستور [az,el]=view بدست آورد.

 

برنامه‌ی زیر شكل كامل شده‌ی دستورات بالا با یك for  اضافه برای حركت دادن پیكان‌ها بر روی محور است.

 

a=axes('position',[.4 .1 .2 .8],'box','on','yMinorTick','on','YGrid','on');

hold on

axis([0 .5 -5 105])

set(a,'XTick',[])

a1=axes('position',[.5 .1 .1 .8],'Visible','off' );

axis([0 .5 0 1])

hold on

p=area([.1 .125 .15],[.2 .4 .2],'FaceColor','r');

a2=axes('position',[.4 .1 .1 .8],'Visible','off');

axis([0 .5 0 1])

hold on

p_set=area([0.1 .125 .15],[.2 .4 .2],'FaceColor','b');

axes(a1)

view(-90,90)

axes(a2)

view(90,90)

for i=.05:.001:.45

    set(p,'xdata',[i, .025+i .05+i])

    set(p_set,'xdata',[i, .025+i .05+i])

    drawnow

End

 



[ یکشنبه 30 مرداد 1384 - 09:08 ق.ظ ]
[ویرایش شده در : - - -]

[ پیام ()|| امین باشی ] [axes , ] [+]

axes

جمعه 28 مرداد 1384

تابع axes برای ایجاد محور های مختصات استفاده می شود.axes را با axis اشتباه نكنید تابع axis برای  تعین مقیاس محور ها استفاده می شود.

axes

axes('PropertyName',PropertyValue,...)

axes(h)

h = axes(...)

 

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

 

ویژگی box

مقدار این ویژگی در حالت پیش فرض off است و با on آن حابت محو ها به صورت یك جعبه بسته در می آید

 

ویژگیXMinorTick, YMinorTick, ZMinorTickon

مقدار این ویژگی در حالا پیش فرض off است.

set(gca,'XMinorTick','on')

تابع gca به معنی محور جاری است. عمل كرد ویژگی XMinorTick با مقایسه محور x و محور y مشهود است.

ویژگی XGrid, YGrid, ZGrid  

set(gca,'YGrid','on')

مفدار این ویژگی هم در حالت پیش فرض off است.

 



[ جمعه 28 مرداد 1384 - 06:08 ق.ظ ]
[ویرایش شده در : - - -]

[ پیام ()|| امین باشی ] [axes , ] [+]

بستن پنجره

پنجشنبه 27 مرداد 1384

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

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

get(gcf,'CloseRequestFcn')

 

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

 

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

 

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

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

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

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

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

[ پیام ()|| امین باشی ] [figure , ] [+]

پنچره دیوانه

سه شنبه 25 مرداد 1384

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

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

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

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

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



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

[ پیام ()|| امین باشی ] [figure , ] [+]

figure

دوشنبه 24 مرداد 1384

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

WindowButtonUpFcn و WindowButtonDownFcn

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

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

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

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

 

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

 

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

 

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



[ دوشنبه 24 مرداد 1384 - 11:08 ق.ظ ]
[ویرایش شده در : - - -]

[ پیام ()|| امین باشی ] [figure , ] [+]

uipanel

چهارشنبه 19 مرداد 1384

این تابع در نسخه‌ی جدید مطلب (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 نسبت به خود پنل تعین می شود.



[ چهارشنبه 19 مرداد 1384 - 04:08 ق.ظ ]
[ویرایش شده در : چهارشنبه 19 مرداد 1384 - 05:08 ق.ظ]

[ پیام ()|| امین باشی ] [uipanel , ] [+]

uicontrol

شنبه 15 مرداد 1384

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

     



[ شنبه 15 مرداد 1384 - 05:08 ق.ظ ]
[ویرایش شده در : شنبه 15 مرداد 1384 - 07:08 ق.ظ]

[ پیام ()|| امین باشی ] [uicontrol , ] [+]


نوشته های پیشین ...