تبلیغات آموزش مطلب
وبلاگ من
نویسنـــدگان :
امین باشی (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
وب كلاس
جنون اینترنت
فرهنگستان زبان و ادب پارسی
جسنجو :
خبرنامه :
نظر سنجی :
امروز :
بازدید های امروز :
بازدید های دیروز :
كل مطالب :
كل نظرها :
كل بازدید ها :
ایجاد صفحه : - ثانیه
patch
patch
دستور
patch برای رسم چندضلعیها
استفاده میشود.
patch
(X,Y,C)
patch
(X,Y,Z,C)
patch
(FV)
patch
(...'PropertyName',PropertyValue...)
patch
('PropertyName',PropertyValue...) PN/PV pairs
only
handle = patch(...)
این دستور یك
دستور سطح پایین محسوب میشود چون با استفاده از آن میتوان نقطه ، خط ، چندضلعی
مسطح و اشكال 3 بعدی را رسم كرد.در حالتی كه xوy به صورت بردار باشد
مشخص كننده یك چند ضلعی و همگامی كه بصورت ماتریس باشند به تعداد ستونهای ماتریس
چندضلعی رسم میكند.
C
مشخص كننده رنگ چند ضلعی میباشد ؛ كه میتواند تك رنگ یا مشخص كنده رنگ هر وجه یا
رنگ هر راس
باشد.
میتوان C
را بصورت یك بردار m*3 یعنی یك بردار RGB وارد كرد كه در این صورت رنگ
چند ضلعی را بطور مستقیم تعین میكند.
اگر از
Z هم استفاده كنیم یك
چند ضلعی 3 بعدی خواهیم داشت.
در شكل
سوم این دستور FV
یك structure
(معادلش رو بلد نیستم) است كه حاوی دو فیلد
Vertices و Faces
باشد.
شكل
چهارم
برای اضافه كردن چند ویژگی به دستور است و حالت پنچم فقط زوچهای PN/PV (ویژگی/مقدار) فبول
میكند در این حالت تمام خصوصیات یك چند ضلعی را شخصا تعین میكنیم.
نكته مهم
در استفاده از patch
رنگآمیزی آن است كه در فرصت مناسب به آن خواهم پرداخت.
ساختار درختی گرافیك را كه یادتان هست. تقربیا
تابع figure
را كامل توضیح دادم ، بعد در مورد اشیا core صحبت كردم و مقداری از آنها را توضیح
دادم.
patch هم یكی از اشیا core است.
patch
([1 2 3],[0 1 0],[2 1 0],6)
grid
view
(45,45)
دستور
findobj برای پیدا كردن اشیا
گرافیكی بكار میرود .
h=findobj
اگر از
دستورات بالا استفاده كرده باشید ، h یك بردار جهار تایی است كه به ترتیب ساختار درختی مرتب شده است.
هر درایه پدر درایه زیر خود است.
get
(h,'type')
با استفاده
از این دستور نوع هركدام از این درایه ها را میتوان مشاهده كرد.
BusyAction & Interruptible
BusyAction &
Interruptible
اكثر
اشیایی كه در ساختار گرافیكی مطلب دیده میشوند ، ویژگیهای مشتركی دارند.امروز به
دو ویژگی دیگر از آنها میپردازم.
این كدها
را در در یك m-file
به اسم plot1 ذخیره كنید.
x=1:100;
y=x.^2;
hold on
for i=1:99
plot([x(i) x(i+1)],[y
(i)
y(i+1)])
drawnow
end
و كدهای
زیر را به اسم plot2
x=1:100;
y=-(x.^2);
hold on
for i=1:99
plot([x(i)
x(i+1)],[y(i) y(i+1)])
drawnow
end
در خط
فرمان دستور زیر را بنویسید.
figure
('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1')
بر روی
پنجره باز شده كلیك كرده و تكمه موس را پایین نگه دارید ، بعد از چند لحظه تكمه
موس را رها كنید.
میبینید
كه رسم نمودار اول متوقف شده و نمودار دروم رسم میشود.
با دستور
get مقدار دو ویژگی یاد
شده را مشاهده كنید.
get
(gcf,'bus')
get
(gcf,'inter')
نكته : در هنگام كار كردن با ویژگیها لازم نیست نام
كامل آنها را بنویسید، فقط تا آنجایی كه با بقیه ویژگیها قاطی نشود لازم است كه
بنویسید.
مقدار
bus برابر با
queue(صف) یعنی
رخداد(event)
دوم بعد از رخداد اول انجام میشود.مقدار inter برابر با on یعنی رخداد دوم میتواند جلوی رخداد اول را بگیرد.
figure
('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1','Interru
ptible','off')
دوباره
تكمه موس را پایین نگه داشته و بعد رها كنید.میبینید كه رخداد اول یطور كامل
انجام شده و بعد رخداد دوم انجام میشود.
این دفعه
یك پنجره ایجاد كرده و مقدار bus
را برابر با cancel
و مقدار inter
را off
میكنیم.
figure
('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1')
set
(gcf,'inter','off')
set
(gcf,'bus','cancel')
بعد از
رها كردن موس هیچ اتفاقی نمیافتد.
چهاردیواری
Texture
حتما
میدانید texture
چیه.الان میخواهیم یك چهار دیوتری بسازیم و روی دیوارهاش چند تصویر به عنوان texture قرار دهیم.
اولین كار
اینه كه چهارتادیوار رو تعریف كنیم.
set(gca,'box','on')
زائیه دید
را تنظیم كرده و برچسب گذاری میكنیم.
view(45,45)
xlabel('x')
ylabel('y')
zlabel('z')
قشنگ كار
به اینه كه شما هم بتوانید انجامش بدید پس از تصاویری كه در خود مطلب وجود دارد
استفاده میكنم.
load clown
حالا با
دستور surface
دیوارها را تعریف میكنیم.
h=surface([0
1],[0 0],[0 0;1 1]);
و بعد
تصویر مورد نظر را به صورت texture
بر روی سطح قرار میدهیم.
set(h,'cdata',X,'FaceColor','texturemap')
مثل اینكه
تصویر وارونه است.
set(h,'cdata',flipud(X))
بقیه
تصاویر را نیز به همین ترتیب بر روی دیوار قرار میدهیم.
surface([0 1],[1 1],[0 0;1
1],flipud(X),'FaceColor','texturemap')
load spine
surface([0 0],[0 1],[0 1;0
1],(X),'FaceColor','texturemap')
load flujet
surface([1 1],[0 1],[0 1;0
1],(X),'FaceColor','texturemap')
یك مقدار
رنگش بده
load clown
colormap(map)
اینم یه
دور درجا به افتخار جمع
for i=0:360
view(45-i,45)
drawnow
end
surface
Surface
این دستور
برای ایجاد سطح بكار میرود.
surface(Z)
surface(Z,C)
surface(X,Y,Z)
surface(X,Y,Z,C)
surface(...'PropertyName',PropertyValue,...)
h = surface(...)
در شكل
اول دستور، اندیس سطرها و ستونها را به عنوان x,y و مقدار هر درایه را به عنوان
ارتفاع در نظر میگیرد.ماتریس داده شده نباید به صورت بردار(سطری یا ستونی)باشد.
surface([-2 2 ;2 -2])
این دستور
هیچ تغیری در زاویه دید نمیدهد پس لازم است كه رای دیدن تصویر آن را بچرخوانیم.
view(-45,45)
دستور surface همیشه یك سطح به
تصویر اضافه میكند.
surface([-2 2 ;2 -2])
surface([2 -2 ;-2 2])
view(-45,45)
رنگ سطح
با توجه به ارتفاع آن مشخص می شود.مگر انكه با ماتریس C ان را مشخص كنیم. در این مورد
بعدا بیشتر صحبت خوام كرد.
حالت سوم
از این دستور x,y,z
را بطور جداگانه قبول میكند.
surface([1 2 3],[3 2 1],[1 30 40;20 10 50; 24 56 64])
به اندازه
z توجه كنید. اندازه z برابر با ضرب اندازهx در اندازهyاست.
image2
Image2
امروز
تعدادی از ویژگیهای تابع image
كه نحت نام Data Defining the Object دسته بندی میشوند را
برسی می كنیم.
این
ویژگیها برای تعریف كردن تصویر بكار میروند
تابع
image به دو صورت سطح بالا و سطح پایین قابل استفاده است.(حتما تفاوت
زبانهای سطح بالا مثل C
، با زبانهای سطح پایین مثل اسمبلی را میدانید).
استفاده
از تابع به صورت سطح بالا یك سری ویژگی دارد
جهت y برعكس میشود.
نمای دید به [0 90] تغیر میكند.(view([0 90]))
و...
هنگام
اسفاده از تابع سطح پایین، مسقیما با خصوصیات نصویر كار میكنیم.
image('PropertyName',PropertyValue,...)
Cdata
یك ماتریس
یا یك آرایه سه بعدی كه رنگ تصویر را مشخص میكند.
image('cdata',cdata)
معادل با image(C) است.در واقع image(c) معادل سطح بالا است.
متلب(مطلب)به
3 طریق تصویر را رنگ میكند.
با توجه
به colormap
ماتریس را اندیس گذاری میكند. مثلا اگر مقدار یك درایه برابر با 15 باشد به ان
درایه رنگ 15ام از colormap
را اختصاص میدهد.
در این
حالت ویژگی CdataMapping
برابر با direct
است.
در حالت
دوم مقدار ویژگی CdataMapping
برابر با scaled
است.یعنی رنگ با توجه به ویژگی clim تعین میشود. Clim یك بردار است كه اولین درایه
آن برایر با شماره اولین رنگ در colormap و درایه دوم آخرین رنگ از colormap است.خلاصه كنم در این حالت به
بزرگترین درایه ماتریس آخرین رنگ و به كوچكترین درایه آن اولین رنگ از colormap اختصاص داده شده و با
توجه به این بقیه درایه ها رنگ میگیرند.
h=image([1 40 20]);
حالا این
دستور را امتحان كنید و تفاوت را ببینید
set(h,'CDataMapping','scaled')
حالت سوم
استفاده از ماتریس RGB
است.(به مطالب فبلی مراجعه كنید)
CdataMapping
كار این
ویژگی را توضیح دادم ( به چند خط بالاتر مراجعه كنید) فقط نكته مهم این است كه
هنگامی كه از ماتریسRGB(true
color) استفاده میكنید این ویژگی بی تاثیر است.
Xdata
و Ydata
محل قرار
گرفتن اولین رنگ را مشخص میكند. متلب همیشه یك ناحیه مربعی را رنگ میكند كه
مختصات مركز آن با توجه به این ویژگیها مشخص میشود.
مقدار پیش
فرض آن در زیر آورده شده است.
XData [1 size(CData,2)]
YData [1 size(CData,1)]
image
image
برای
نمایش تصویر استفاده میشود.
image
(C)
image
(x,y,C)
image
(...,'PropertyName',PropertyValue,...)
image
('PropertyName',PropertyValue,...)
handle = image(...)
برای
نمایش تصویر لازم است كه ابتدا ان را به صورت ماتریس در بیاوریم.
خود
ماتریس به دوحالت قابل استفاده است.
1-هر
درایه آن نشاندهنده شماره یك از از colormap باشد.
image
(floor(rand(64,64)*64))
منظور از
floor همان جز صحیح
است.
2-
ماترسی
به صورت m-by-n-by-
3
باشد كه با آنtrue color
گفته میشود.
در نوع
ماتریس m وn نشاندهنده هر پیكسل و
اندیس 3و2و1 نشاندهنده
رنگ آن پیكسل است. اندیس 1 رنگ قرمز، 2 رنك سبز و 3 آبی . به این ماتریس ، ماتریس RGB هم گفته
میشود.
برای
تبدیل كردن تصویر به ماتریس از دستور imread استفاده میكنیم.یك تصویر بر روی كامپیتر خود در نظر
بگیرید. و آدرس آن را به عنوان آرگومان
دستور
imread استفاده
كنید.
C=imread
('
**** ');
دقت كنید
كه '' را حتما استفاده كنید. اگر تصویر شما از نوع GIF باشد بهصورت
colormap(حالت اول) ذخیره میشود. اگر در تصویر شما رنگ سفید باشد به صورت آبی نمایش
داده میشود چون در colormap
پیش فرض پنجره رنگ سفید تعریف نشده است.اما اگر از یك تصویر JPG استفاده كنید.به صورت
RGB ذخیره
میشود.
برای
دیدن
تصویر بنویسید
image(C)
اگر در
محور ها دقت كنید متوجه میشوید كه در هنگام نمایش تصاویر محور y برعكس
میشود.
حالا كه
تصاویر به ماتریس تبدیل كردیم، میتوان آنها را ویرایش كرد.
clear
k2=1:100;
fig=figure;
c0=zeros
(256,1);
c255
(256,1)=255;
c255
(:,1)=255;
cf=
(0:255)';
cb=(255:-1:0)';
Co=[c0
,c255 , cf ; cf , cb , c255 ; c255 ,c0
,cb];
i=10;
while ishandle(fig)
C(k2,k2,1)=Co(i-
9,1)/255;
C(k2,k2,2)=Co(i-
9,2)/255;
C(k2,k2,3)=Co(i-
9,3)/255;
image
(C)
drawnow
i=i+1;
if i
>=778
i=10;
end
end
در این
مثال ابتدا طیف رنگ سبز تا قرمز (3*256=768)
را ایجاد شده و بعد در یك تصویر از نوع RGB به اندازه 100*100 استفاده شده
است.
colormap
Colormap
دستور زیر
را در خط فرمان وارد كنید.
Colorbar
در صورت
استفاده ازاین دستور یك پنجره باز شده(یا بر روی پنجره جاری) و یك ستون رنگی در
سمت راست آن نمایش داده میشود. حالا این دستور را استفاده كنید.
colormap
(cool)
میبینید
كه رنگ ستون تغیر كرد.
Colormap(معادل نتونستم پیدا كنم) یك ماتریس m در 3 است كه مقادیر درایههای آن
عددی حقیقی بین 0 و 1 است. هر ردیف در حقیقت نشان دهنده یك رنگ است.
Kth ردیف معادل Kth رنگ است.
image([3 20])
دستور
بالا رنگهای شماره 3 و 20 از colormap را نمایش میدهد.اگر
نوع colormap
را عوض كنید مثلا با این دستور
colormap
(summer)
image
([3 20])
در هنگام
رنگآمیزی پنجره(وقتی كه رنگها بطور مستقیم تعبن نشوند).مطلب با استفاده از colormap به رنگآمیزی پنجره
اقدام میكند.
load flujet
image
(X)
colormap
(jet)
حالاcolormap را عوض كنید و تفاوت را
ببینید.
colormap
(winter)
مطلب
انواع مختلفی از colormap
ها را پشتیبانی میكند. برای دیدن آنها دستور زیر را در خط فرمان بنویسید. در پنجره colormapeditor و منوی
tools میتوانید لیست colormap های تعریف شده را مشاهده
كنید.
colormapeditor
تاحالا در مورد همه چیز حرف زدم بجز اینكه آخر وعاقبت این وبلاگ به كجا ختم میشه و قرار است به كجا برسیم . اگر ساختار درختی اشیا گرافیكی در مطلب را در نظر بگیرید .(به Organization of Graphics Objects مراجعه كنید)
درمورد تنه درخت -- تابع figure – تا حالا مطالب زیادی را نوشتهام و تقریبا اكثر آرگومانهای آن را معرفی كردهام.بهد از تنه درخت به شاخههای آن میرسیم.
برنامه من برای ادامه كار در این وبلاگ پرداختن به بقیه قسمتهای درخت است.
ممكن است بپرسید كه اینها به چه دردی میخورد.وقتی كه قرار بود اولین نسخه از پروژهام به استاد نشان دهم ، چیزی در حدود 10 ساعت برای زیباسازی و رنگ آمیزی ظاهر آن وقت صرف كردم بطوریكه بیشتر به یك تابلو شباهت داشت و چون می دانستم استادم یك مانیتور 14 اینچ قدیمی دارد تمام پنجرهها ، فونتها وهرچیز دیگری را بصورت نسبی نوشتم. اما هرچه رشته كرم پنبه شد.
استاد با كمال متانت فرمودن : من با رنگ مشكلی ندارم و كور رنگی هم ندارم اما یه عدهای كور رنگی دارند ، این رنگهاش رو روشن تر كن.
نوشته های پیشین ...
هرگونه استفاده تجاری از مــطالب این سایت بصورت
كتاب٬ نشریه٬ وب و ... ممنوع میباشد
All right
reserved©2005
Amin Bashi