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

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 اینچ قدیمی دارد تمام پنجره‌ها ، فونتها وهرچیز دیگری را بصورت نسبی نوشتم. اما هرچه رشته كرم پنبه شد.

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



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

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

Core Graphics Objects

این  مجموعه شامل  دستورات   اولیه رسم توابع ، محورها ، تصاویر و ... می‌باشد. در ساختار درختی این اشیا زیرمجموعه axes هستند.

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

 

Axes

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

Image

برای نمایش تصویر بكارمی‌رود.

image(imread(' ***** '))

بجای ستاره‌ها ادرس بك عكس را قرار دهید.

Light

برای تنظیم نور بكار می‌رود و تنها بر اشیایی از نوع patch  و surface اثر می‌كند.

h = surf(peaks);

set(h,'FaceLighting','phong','FaceColor','interp',...

      'AmbientStrength',0.5)

light('Position',[1 0 0],'Style','infinite');

figure;

h = surf(peaks);

set(h,'FaceLighting','phong','FaceColor','interp',...

      'AmbientStrength',0.5)

با توجه به مثال بالا كارایی این تبع به وضوح قابل مشاهده است.

Line

بزای رسم خط استفاده می‌شود.

t = 0:pi/20:2*pi;

hline = line(t+.06,sin(t),'LineWidth',4,'Color',[.8 .8 .8]);

Patch

برای رسم چند ضلعی‌ها مورد استفاده قرار می‌گیرد.

x = [0 0;0 1;1 1];

y = [1 1;2 2;2 1];

z = [1 1;1 1;1 1];

tcolor(1,1,1:3) = [1 1 1];

tcolor(1,2,1:3) = [.7 .7 .7];

patch(x,y,z,tcolor)

 Rectangle

تابعی كه برای رسم مستطیل ، بیضی ، دایره و ... بكارمی‌رود.

rectangle('Position',[0.59,0.35,3.75,1.37],...

          'Curvature',[0.8,0.4],...

         'LineWidth',2,'LineStyle','--')

Surface

یك شی 3 بعدی كه هر آرایه آن با توجه به colormap رنگ می‌شود.

load clown

surface(peaks,flipud(X),...

        'FaceColor','texturemap',...

        'EdgeColor','none',...

        'CDataMapping','direct')

colormap(map)

view(-35,45)

 Text

برای نوشتن بر روی پنجره (در ناحیه‌ای كه محورتعریف شده باشد) بكار می‌رود.

 plot(0:pi/20:2*pi,sin(0:pi/20:2*pi))

text(pi,0,' \leftarrow sin(\pi)','FontSize',18)

در مطالب بعدی به هركدام از این توابع خواهم پرداخت.



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



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


All right reserved©2005 Amin Bashi