انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB)

رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB)

#2
اکنون قصد داریم که تلاشی برای رسم رنگ های تعریف شده بر اساس 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) :

کد پی‌اچ‌پی:
clear all
close all
clc

1:3
1:3
= [362;
 
    854;
 
    957]

Red = [255/2550200/255;
 
      0  100/2550;
 
      200/2550100/255] % red
   
Green 
= [0  255/255100/255;
 
        0  100/255200/255;
 
        255/25500] % green
     
Blue 
= [0  0255/255;
 
       255/255100/255200/255;
 
       0100/2550] % 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) بالا :

   

کد پی‌اچ‌پی:
=

 
    1     2     3


=

 
    1     2     3


=

 
    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

1:3
1:3

Red 
= [255/2550200/255;
 
      0  100/2550;
 
      200/2550100/255] % red
   
Green 
= [0  255/255100/255;
 
        0  100/255200/255;
 
        255/25500] % green
     
Blue 
= [0  0255/255;
 
       255/255100/255200/255;
 
       0100/2550] % blue

CO
(:,:,1) = Red; % red
CO
(:,:,2) = Green; % green
CO
(:,:,3) = Blue; % blue

Red

surf
(X,Y,Z,CO)
xlabel('x')
ylabel('y')
zlabel('z')

rotate3d on 

نتیجه اجرای کد متلب (MATLAB) بالا :

   

کد پی‌اچ‌پی:
=

 
    1     2     3


=

 
    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


=

 
   1.0000         0    0.7843
         0    0.3922         0
    0.7843         0    0.3922 

با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :

   

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پیام‌های این موضوع
RE: رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB) - توسط admin - ۱۳۹۸/۰۸/۰۲, ۰۹:۰۱ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان