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

تماس با من

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

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

matlabedu.ir [at] gmail.com



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

Tag

تقربیا همه توابعی كه آرگومانهایی به صورت زوج اسم/ویژگی (name/property) قبول می‌كنند

ویژگی tag  را دارند. مقدار این ویژگی یك رشته(string) است كه توسط كاربر تعریف می‌شود. و هرچیزی می‌تواند باشد.

هنگامی شما برنامه‌هلی خود را به صورت function می‌نویسید، متغبرها به صورت محلی(local) تعریف می‌شوند یعنی در خارج از تابع تعریف نشده‌ هستند.اگر بخواهیم از آنها در جای دیگری هم استفاده كنیم باید آنها را به صورت سراسری (global)   تعریف كنیم یا به صورت آرگومان به درون دیگر توابع بفرستیم.اصولا نوشتن متغیرها به صورت سراسری از زیبایی برنامه كم می‌كند.

در مورد اشیایی(object) كه ویژگی tag را دارند می‌توان با استفاده از تابع findobj دستگیره شی مورد نظر و در نتیجه بقیه ویژگیهای آن را پیدا كرد.

function test_tag

    fig=figure ('tag','1');

    test1

    test2

    find_tag('1')

    find_tag('2')

    find_tag('3')

function test1

    fig=figure ('tag','2');

function test2

    fig=figure ('tag','3');

function find_tag(n)

    fig=findobj ('tag',n);

    figure (fig);

    plot([1 str2num(n)])

در این مثال 4 تابع مختلف تعریف كردیم كه 3 تا از آنها تابع داخلی است.

دستور fig=findobj('tag',n) شیی را كه مقدار ویژگی tag آن برابر با n  است ، پیدا می‌كند.

دقت كنید كه مقدار ویژگی tag یك رشته است. و ما نیز در هنگام استفاده از find_tag یك رشته به درون تابع می‌فرستیم.



نوع مطلب : figure 

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

ساختن منوفرعی  

برای ساختن منو فرعی (submenu) كافی است كه ابتدا منوی اصلی را تعریف كرده و بعد دستگیره منوی اصلی را به عنوان پدر (parent) در  تعریف منوفرعی ذكر كینم.

 figure('menubar','none')

    f=uimenu('label','menu')

    f1=uimenu (f,'label','submenu')

    f2=uimenu(f1,'label','1')

    f3=uimenu (f1,'label','2')

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

uimenu (parent,'PropertyName',PropertyValue,…)

handle = uimenu(parent,'PropertyName',PropertyValue,…)

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

با استفاده از این شكل تابع uimenu می‌توان برای ContextMenu (با راست كلیك فعال می‌شود) نیز منوی فرعی تولید كرد.

cmenu = uicontextmenu;

    f1=uimenu (cmenu,'label','submenu');

    f2=uimenu (f1,'label','1');

    f3=uimenu (f1,'label','2');

    set (gcf,'UIContextMenu',cmenu)

 



نوع مطلب : uimenu 

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

Uimenu

با استفاده ار این تابع می‌توانید برای پنجره ها منو بسازید.

طرز كار این تلبع بسیار ساده است . البته مثل اكثر توابع گرافیكی تعداد زیادی آرگومان(ویژگی‌) دارد.

uimenu ('PropertyName',PropertyValue,...)

uimenu (parent,'PropertyName',PropertyValue,...)

handle = uimenu('PropertyName',PropertyValue,...)

handle = uimenu(parent,'PropertyName',PropertyValue,...)

در تمام توابعی كه آرگومانهایی از نوع زوجهای name/property (مثل figure یا axes یا همین uimenu )قبول می‌كنند، می توان آرگومانها را به صورت structure یا cell arrays استفاده كرد.

محل قرار گرفتن منو به ویژگی menubar (مربوط به figure )

بستگی دارد. اگر مقدار این ویژگی برابر با figure  باشد منو های ساخته شده به ترتیب پشت سر هم بعد از آخرین منو‌ی پنجره (منوی help ) قرار می‌گیرد و اگر مقدار این ویژگی برابربا none  باشد منوهای ساخته شده تنها منوی پنجره می‌باشد.البته با استفاده از ویژگی position می‌شود محل قرار گرفتن منو را تنظیم كرد. مقدار این ویژگی یك عدد طبیعی است .

f = uimenu ('Label','exit', 'Position',[2]);

 به محل قرار گرفتن منو دقت كنید .

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

باری ساختن یك زیر منو از ویژگی parent استفاده می‌كنیم مقدار این ویژگی برابر با دستگیره منوی اصلی است.

f1=uimenu (f,'label','exit')

با استفاده از ویژگی  Callback عمل انچام شده توسط منو را كنترل می‌كنند

Set (f1,'callback','closereq')

می توان برای سریع تر شدن كار از میانبر برای ویژگی callback استفاده كرد . این كار ار با استفاده از ویژگی Accelerator انجام می‌دهیم به این صورت كه مقدار این ویژگی برابر با یك كاراكتراست . كه با فشردن ctrl و كاراكتر مورد نظر عمل تعین شده توسط callback انجام می‌شود. البته در سیستم عامل ویندوز استفاده از كاراكتر های c, x, v مجاز نیست.

set (f1,'Accelerator','4')

با زدن همزمان دكمه‌های ctrl+4 پنجره بسته می‌شود



نوع مطلب : uimenu 

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

Pop-up

ویژگی deletefcn كنترل كننده‌‌ی عمل انجام شده در هنگام بسته شده پنجره است فرق آن با ویژگی CloseRequestFcn آن است كه ویژگی deletefcn در بسته شدن پنجره دخالت

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

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

برای ساختن pop-up اول باید یك تابع بازگشتی داشته باشیم.

fig=@()figure('WindowStyle','modal','createfcn','ezplot(''sin'')','deletefcn','fig()');

به ویژگی deletefcn توجه كنید. مقدار این ویژگی خود تلیع fig است.

حالا كافی است كه تابع fig را اجرا كنیم اما دقت كنید كه از دست پنجره‌ی ایجاد شده نمی‌توانید راحت شوید هر بار كه آن را به بندید دوباره باز می‌شود. حتی نمی توانید از مطلب خارج شوید. الیته این مشكل مثل دفعه قبل كه با ویژگی CloseRequestFcn این كار را كردیم نیست. در حالت فبل یا یك دستور set می توانستیم مشكل را حل كنیم اما این بار لازم است ابتدا ctrl+c همزمان فشار دهید بعد با استفاده از set مقدار ویژگی deletefcn را تغیر دهید.

fig();

 



نوع مطلب : figure 

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

CreateFcn

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

مفدار این ویژگی در حالت پیش فرض تهی است.شما می توانید یك یا چند دستور مطلب را به عنوان مقدار این ویژگی استفاده كنید.

 

   Anonymous Functions

یكی از راهای ایجاد تابع در مطلب و ساده ترین آن استفاده از قالب Anonymous Functions می باشد.

fhandle = @(arglist) expr

در این روش در یك خط تابع تعریف می شود . fhandle دستگیره تابع است و در حقیفت نام تابع . arglist لیست آرگومانهای تابع است كه با كاما از هم جدا شده اند. و expr نشان دهنده عملی است كه تابع انجام می دهد.

sqr = @(x) x.^2;

figure ('CreateFcn','y=1:10; plot(sqr(y))');

این دستور یك پنجره ایجاد كرده و بر روی آن تابع x.^2 را رسم می كند. البته شكل حاصل یك خطه شكسته است نه یك منحنی ، برای هموارتر شدن منحنی باید تعداد نقاط آن –تعداد y ها- را بیشتر كرد.



نوع مطلب : figure 

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

یك مقدار هم در مورد ساختار درختی اشیا گرافیكی در مطلب صحبت  كنم. ادرس زیر را در 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 است .

 



نوع مطلب : Organization of Graphics Objects 

نشانگر فشار

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

امروز می‌خوایم با استفاده از 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

 



نوع مطلب : axes 

axes

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

تابع 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 است.

 



نوع مطلب : axes 



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


All right reserved©2005 Amin Bashi