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

patch

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

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')

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



نوع مطلب : patch 

BusyAction & Interruptible

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

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')

بعد از رها كردن موس هیچ اتفاقی نمی‌افتد.



نوع مطلب : figure 

چهاردیواری

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

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



نوع مطلب : figure 

surface

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

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

 



نوع مطلب : surface 

image2

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

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

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

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 استفاده شده است.

 



نوع مطلب : image 

colormap

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

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



نوع مطلب : figure 

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

تاحالا در مورد همه چیز حرف زدم بجز اینكه آخر وعاقبت این وبلاگ به كجا ختم  می‌شه و قرار است به كجا برسیم . اگر ساختار درختی اشیا گرافیكی در مطلب را در نظر بگیرید .(به   Organization of Graphics Objects مراجعه كنید)

درمورد تنه درخت -- تابع figure – تا حالا مطالب زیادی را نوشته‌ام و تقریبا اكثر آرگومانهای آن را معرفی كرده‌ام.بهد از تنه درخت به شاخه‌های آن می‌رسیم.

برنامه‌ من برای ادامه كار در این وبلاگ پرداختن به بقیه قسمتهای درخت است.

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

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



نوع مطلب : خودم 



  • تعداد صفحات :2
  • 1  
  • 2  


All right reserved©2005 Amin Bashi