اکنون قصد داریم که تلاشی برای رسم رنگ های تعریف شده بر اساس RGB ، توسط دستور surf داشته باشیم.
برای رسم شکل سه بعدی (3D) بر اساس دستور surf ، شیوه رسم بستگی به نوع اطلاعات دارد و ما صرفا کدهایی را مثال می زنیم که شیوه کلی نمایش رنگ های مورد نظرمان توسط دستور surf را متوجه شوید (بنابراین حتما چک کنید که شیوه صحیح نمایش برای اطلاعات شما به چه صورت خواهد بود).
در واقع نکته مهم این است که رنگ های مورد نظر ما، در سطوح ساخته شده از اتصال تعدادی نقطه نمایش داده می شوند، اما اینکه مختصات آن نقاط را چه مقداری در نظر بگیریم، بستگی به نوع اطلاعات شما دارد و بنده صرفا یک کد پایه را ارائه خواهم کرد.
یک نکته مهم دیگر نیز وجود دارد : چون رنگ ها در سطوح بین اتصال نقطه ها رسم می شوند (نه در خود نقطه ها) (بر خلاف شکل نوشته قبلی)، بنابراین تعدادی از رنگ ها را در شکل مشاهده نخواهیم کرد (این مورد را در مثال ها بررسی کنید تا متوجه منظورم شوید).
برای مختصات سه بعدی هر نقطه، باید سه مقدار x و y و z را تعیین کنیم. بنده به عنوان مثال، مختصات x و y برای نقاط را به صورت ترتیب اعداد 1 و 2 و 3 در نظر می گیرم. پس 3 در 3 می شود 9 نقطه. بنابراین باید مختصات z برای آن نقطه ها را به صورت یک ماتریس 3 در 3 مشخص کنیم.
بنده بر اساس نوع انتخاب مقادیر برای z ، دو مثال می زنم. در مثال اول، مقادیر z را به صورت دلخواه می نویسم که ربطی به رنگ ها ندارد. اما در مثال دوم، مقادیر z را برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ، در نظر می گیرم (شما می توانید برابر هر یک از مقدار دو رنگ اصلی دیگر و یا هر مورد دیگری در نظر بگیرید).
توصیه می شود در نرم افزار متلب (MATLAB)، به Help آن مراجعه نموده و راهنمای دستور surf را بخوانید (مخصوصا بخش Specify True Colors for Surface Plot که در مورد به کار بردن رنگ های RGB صحبت کرده است).
مثال اول (مقادیر z به صورت دلخواه) :
کد متلب (MATLAB) :
همان طور که مشاهده می کنید، مقادیر رنگ ها را بر عدد 255 تقسیم نموده ایم (تا مقدار آنها بین 0 تا 1 باشد).
دقت کنید که دستور rotate3d را به کار برده ایم تا بتوانید با موس، شکل را بچرخانید و آن را از زوایای مختلف ببینید (تا سطوح پنهان شده در پشت برخی سطوی دیگر را نیز مشاهده نمایید).
نتیجه اجرای کد متلب (MATLAB) بالا :
با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :
پس می بینید که اگرچه 9 نقطه (رنگ) داشته ایم، اما تنها 4 سطح داریم و بنابراین 4 رنگ در شکل مشاهده می شود (باید ببینید اصلا این نوع نمایش اطلاعات به درد شما می خورد یا نه. یا اینکه با ترفندی خاص، سعی کنید که همه رنگ ها را در شکل نمایش دهید، بنده در این زمینه تجربه ای ندارم که آیا راهی وجود دارد یا نه).
مثال دوم (مقادیر z برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ) :
کد متلب (MATLAB) :
نتیجه اجرای کد متلب (MATLAB) بالا :
با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :
برای رسم شکل سه بعدی (3D) بر اساس دستور surf ، شیوه رسم بستگی به نوع اطلاعات دارد و ما صرفا کدهایی را مثال می زنیم که شیوه کلی نمایش رنگ های مورد نظرمان توسط دستور surf را متوجه شوید (بنابراین حتما چک کنید که شیوه صحیح نمایش برای اطلاعات شما به چه صورت خواهد بود).
در واقع نکته مهم این است که رنگ های مورد نظر ما، در سطوح ساخته شده از اتصال تعدادی نقطه نمایش داده می شوند، اما اینکه مختصات آن نقاط را چه مقداری در نظر بگیریم، بستگی به نوع اطلاعات شما دارد و بنده صرفا یک کد پایه را ارائه خواهم کرد.
یک نکته مهم دیگر نیز وجود دارد : چون رنگ ها در سطوح بین اتصال نقطه ها رسم می شوند (نه در خود نقطه ها) (بر خلاف شکل نوشته قبلی)، بنابراین تعدادی از رنگ ها را در شکل مشاهده نخواهیم کرد (این مورد را در مثال ها بررسی کنید تا متوجه منظورم شوید).
برای مختصات سه بعدی هر نقطه، باید سه مقدار x و y و z را تعیین کنیم. بنده به عنوان مثال، مختصات x و y برای نقاط را به صورت ترتیب اعداد 1 و 2 و 3 در نظر می گیرم. پس 3 در 3 می شود 9 نقطه. بنابراین باید مختصات z برای آن نقطه ها را به صورت یک ماتریس 3 در 3 مشخص کنیم.
بنده بر اساس نوع انتخاب مقادیر برای z ، دو مثال می زنم. در مثال اول، مقادیر z را به صورت دلخواه می نویسم که ربطی به رنگ ها ندارد. اما در مثال دوم، مقادیر z را برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ، در نظر می گیرم (شما می توانید برابر هر یک از مقدار دو رنگ اصلی دیگر و یا هر مورد دیگری در نظر بگیرید).
توصیه می شود در نرم افزار متلب (MATLAB)، به Help آن مراجعه نموده و راهنمای دستور surf را بخوانید (مخصوصا بخش Specify True Colors for Surface Plot که در مورد به کار بردن رنگ های RGB صحبت کرده است).
مثال اول (مقادیر z به صورت دلخواه) :
کد متلب (MATLAB) :
کد پیاچپی:
clear all
close all
clc
X = 1:3
Y = 1:3
Z = [3, 6, 2;
8, 5, 4;
9, 5, 7]
Red = [255/255, 0, 200/255;
0, 100/255, 0;
200/255, 0, 100/255] % red
Green = [0, 255/255, 100/255;
0, 100/255, 200/255;
255/255, 0, 0] % green
Blue = [0, 0, 255/255;
255/255, 100/255, 200/255;
0, 100/255, 0] % blue
CO(:,:,1) = Red; % red
CO(:,:,2) = Green; % green
CO(:,:,3) = Blue; % blue
surf(X,Y,Z,CO)
xlabel('x')
ylabel('y')
zlabel('z')
rotate3d on
همان طور که مشاهده می کنید، مقادیر رنگ ها را بر عدد 255 تقسیم نموده ایم (تا مقدار آنها بین 0 تا 1 باشد).
دقت کنید که دستور rotate3d را به کار برده ایم تا بتوانید با موس، شکل را بچرخانید و آن را از زوایای مختلف ببینید (تا سطوح پنهان شده در پشت برخی سطوی دیگر را نیز مشاهده نمایید).
نتیجه اجرای کد متلب (MATLAB) بالا :
کد پیاچپی:
X =
1 2 3
Y =
1 2 3
Z =
3 6 2
8 5 4
9 5 7
Red =
1.0000 0 0.7843
0 0.3922 0
0.7843 0 0.3922
Green =
0 1.0000 0.3922
0 0.3922 0.7843
1.0000 0 0
Blue =
0 0 1.0000
1.0000 0.3922 0.7843
0 0.3922 0
با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :
پس می بینید که اگرچه 9 نقطه (رنگ) داشته ایم، اما تنها 4 سطح داریم و بنابراین 4 رنگ در شکل مشاهده می شود (باید ببینید اصلا این نوع نمایش اطلاعات به درد شما می خورد یا نه. یا اینکه با ترفندی خاص، سعی کنید که همه رنگ ها را در شکل نمایش دهید، بنده در این زمینه تجربه ای ندارم که آیا راهی وجود دارد یا نه).
مثال دوم (مقادیر z برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ) :
کد متلب (MATLAB) :
کد پیاچپی:
clear all
close all
clc
X = 1:3
Y = 1:3
Red = [255/255, 0, 200/255;
0, 100/255, 0;
200/255, 0, 100/255] % red
Green = [0, 255/255, 100/255;
0, 100/255, 200/255;
255/255, 0, 0] % green
Blue = [0, 0, 255/255;
255/255, 100/255, 200/255;
0, 100/255, 0] % blue
CO(:,:,1) = Red; % red
CO(:,:,2) = Green; % green
CO(:,:,3) = Blue; % blue
Z = Red
surf(X,Y,Z,CO)
xlabel('x')
ylabel('y')
zlabel('z')
rotate3d on
نتیجه اجرای کد متلب (MATLAB) بالا :
کد پیاچپی:
X =
1 2 3
Y =
1 2 3
Red =
1.0000 0 0.7843
0 0.3922 0
0.7843 0 0.3922
Green =
0 1.0000 0.3922
0 0.3922 0.7843
1.0000 0 0
Blue =
0 0 1.0000
1.0000 0.3922 0.7843
0 0.3922 0
Z =
1.0000 0 0.7843
0 0.3922 0
0.7843 0 0.3922
با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.