تبلیغات آموزش مطلب
وبلاگ من
نویسنـــدگان :
امین باشی (73)
موضــــوع ها :
figure (14)
line (1)
uicontrol (1)
uipanel (1)
axes (2)
Organization of Graphics Objects (2)
uimenu (2)
خودم (7)
image (2)
surface (1)
patch (1)
text (5)
light (1)
plot object (2)
area (3)
bar (2)
convolution (1)
errorbar (2)
plot (1)
surf (1)
برازش منحنی (1)
workspace (1)
evalin (1)
GUIDE (1)
dsolve (1)
لاپلاس (1)
سری فوریه (3)
حل عددی IVP (2)
حل معادلات دیفرانسیل پاره ای وابسته به زمان در یک بعد (1)
BVP (1)
حل معادلات خطی (1)
solve (1)
حل pde (5)
subs (1)
آرشیـــو :
خرداد 1388 (1)
مرداد 1386 (1)
بهمن 1385 (2)
دی 1385 (2)
آذر 1385 (1)
شهریور 1385 (6)
مرداد 1385 (6)
تیر 1385 (5)
خرداد 1385 (1)
اردیبهشت 1385 (3)
فروردین 1385 (9)
اسفند 1384 (9)
شهریور 1384 (14)
مرداد 1384 (10)
تیر 1384 (3)
لینكدونی :
MATLAB Wiki
History of Iran
لورن
آرشیو لینكدونی
لینكستان :
متمتیکا
مهندسی صنایع - مهندس امیر
مهندسی شیمی ایران
اخبار نجوم
دانلود رایگان کتاب فیزیک به زبان فارسی
وبلاگ فیزیک ایران
مجله نجوم
انجمن علمی پژوهشی نجم شمال
ماه نو
مطلب نوین
آموزش متلب
میكرو روباتیك
معماری بی نظیر
انجمن مهندسی شیمی ایران
تکنولوژی برتر
گلچین دنیای اینترنت
پروژه های جالب الكترونیك
جادوهای ویندوز
Mathworks
وب كلاس
جنون اینترنت
فرهنگستان زبان و ادب پارسی
جسنجو :
خبرنامه :
نظر سنجی :
امروز :
بازدید های امروز :
بازدید های دیروز :
كل مطالب :
كل نظرها :
كل بازدید ها :
ایجاد صفحه : - ثانیه
یك مقدار
هم در مورد ساختار درختی اشیا گرافیكی در مطلب صحبت كنم. ادرس زیر را در 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
است .
نشانگر فشار
امروز میخوایم
با استفاده از 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
برای ایجاد محور های مختصات استفاده می
شود.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
است.
بستن پنجره
با
استفاده از ویژگی CloseRequestFcn
می توان بسته شدن پنجره را كنترل كرد
بطور پیش
فرض مقدار این ویژگی برابر با تابع closereq است.
get(gcf,'CloseRequestFcn')
با اجرای
دستور فوق یك پنجره باز میشود و تابع get مقدار closereq
را بر میگرداند
Fig=figure('CloseRequestFcn','a=2')
كاربرد
این ویژگی كه به ذهن من می رسد ، ایجاد یك پیغام برای اطمینان از در خواست بستن پنجره میباشد.
همچنین می
توان با بستن یك پنجره بفیه پنجره ها را نیز بست .
اگر دستور
دوم را اجرا كردهاید حتما متوجه شده اید كه پنجره fig را نمیشود بست.شاید بخواهید
از مطلب
خارج شوید اما این كار راهم نمیتوانید بكنید.
[ پنجشنبه 27 مرداد 1384 - 09:08 ق.ظ ]
[ویرایش شده در : - - -]
پنچره دیوانه
یكی دیگر
از ویژگیهای تابع figure
، ویژگی ResizeFcn
است. این ویژگی در هنگام تغیر دادن اندازهی پنجره فعال میشود.
در هنگام
ایجاد پنجره مطلب یا توجه به اندازهی مانیتور شما اندازهی پنجره را تغیر میدهد.
figure('ResizeFcn','a=get(gcf,''position'');set(gcf,''position'',a/2);')
قبلا
اشاره كرده بودم كه عبارت gcf
به معنی پنجره جاری است.
عبارتی كه
به ویژگی ResizeFcn
تعلق میگیرد. میتوند یك تابع داخلی ، اسم یك Mفایل یا هر عبارت مجاز دیگری باشد.
figure
قبلا
اشاره كردم كه تابع figure
ویژگی های زیادی دارد.امروز درمورد دوتا دیگه از اونها صحبت می كنیم.
WindowButtonUpFcn
و WindowButtonDownFcn
این دو
ویژگی كنترل كنندهی فشردن تكمه های موس بر روی پنجره هستند.
WindowButtonDownFcn:
هنگامی كه تكمه موس را به پایین فشار دهید عمل میكند
WindowButtonUpFcn:
هنگامی كه تكمه موس را ، رها كنید عمل میكند.
البته
ویژگی دیگر هم وجود دارد (ButtonDownFcn)كه فقط با فشردن تكمه موس عمل می كند و
حساسیتی در مورد رها كرن و فشردن ندارد.
figure('WindowButtonDownFcn','ezplot(''sin'')','WindowButtonUpFcn','ezplot(''cos'')')
اكثر
توابع مطلب دارای ویژگی های مشتركی هستند. مثلا تابع axes هم ویژگی ButtonDownFcn را دارد
یادتون
باشه كه هنگام فشردن تكمه موس حتما چند لحظه آن را نگه دارید و بعد از دیدن نتیجه
آن را رها كنید
uipanel
این تابع
در نسخهی جدید مطلب (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
نسبت به خود پنل تعین می شود.
uicontrol
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
نوشته های پیشین ...
هرگونه استفاده تجاری از مــطالب این سایت بصورت
كتاب٬ نشریه٬ وب و ... ممنوع میباشد
All right
reserved©2005
Amin Bashi