این مثال نحوه ایجاد و نمایش یک شی سه بعدی پیچیده و کنترل ظاهر آن را نشان می دهد. روش های مختلفی برای نمایش شکل های سه بعدی در نرم افزار متلب وجود دارد. در این پست از سایت کافه مکانیک مثالی را بررسی می کنیم تا با نحوه ی نمایش شکل های سه بعدی در محیط کدنویسی نرم افزار متلب آشنا شویم و دستوراتی که ظاهر شکل را تغییر می دهند، بررسی کنیم. قبل از اینکه به دستورات متلب برای نمایش اشکال سه بعدی بپردازیم، بهتر است که با نحوه نمایش شکل های سه بعدی در متلب که به نام اشیا پچ (Patch Objects) یا اشیا وصله شده شناخته می شوند، آشنا شویم.
پچ آبجکت یا شی پچ چیست؟
یک شیء گرافیکی پچ از یک یا چندین چند ضلعی تشکیل شده است که ممکن است به یکدیگر متصل باشند یا نباشند. از پچ ها برای مدل سازی اشیاء دنیای واقعی مانند هواپیما یا اتومبیل و برای ترسیم چند ضلعی های 2 یا 3 بعدی با شکل دلخواه استفاده می شود. در مقابل، اشیاء سطحی (Surface objects) شبکههای مستطیلی چهارضلعی هستند و برای نمایش توپوگرافیهای مسطح مانند مقادیر توابع ریاضی دو متغیره، کانتورها در یک صفحه مستطیلی یا سطوح پارامتری مانند کرهها مناسبتر هستند.
تعدادی از توابع نرم افزار MATLAB پچ آبجکت یا اشیاء وصله ایجاد می کنند مانند توابع fill، fill3، isosurface isocaps، برخی از توابع کانتورها، و Patch. این بخش بر روی استفاده از تابع پچ برای نمایش شکل های سه بعدی پیچیده متمرکز است.
با این مقدمه در مورد اشیا پچ به سراغ دستورات متلب برای نمایش و تغییر ظاهر (مانند رنگ و نور) شکل های سه بعدی می رویم.
دریافت هندسه برای نمایش شکل های سه بعدی در نرم افزار متلب
این مثال از یک شی گرافیکی به نام قوری نیوول (Newell Teapot) استفاده می کند. داده های رئوس، وجه ها و رنگ برای قوری توسط تابع teapotData محاسبه می شود. از آنجایی که قوری یک شکل هندسی پیچیده است، دارای تعداد زیادی رأس (4608) و وجه (3872) است که توسط تابع برگردانده می شود.
[verts, faces, cindex] = teapotGeometry;
ایجاد یک شی از نوع پچ برای قوری
با استفاده از داده های هندسی، قوری را می توان با استفاده از دستور patch ترسیم کرد. دستور patch یک شی از نوع پچ ایجاد می کند.
figure
p = patch('Faces',faces,'Vertices',verts,'FaceVertexCData',cindex,'FaceColor','interp')

ویژگی های شی ایجاد شده را با تایپ نام آن (p) در Command Window می توان مشاهده کرد.
p =
Patch with properties:
FaceColor: 'interp'
FaceAlpha: 1
EdgeColor: [0 0 0]
LineStyle: '-'
Faces: [3872x4 double]
Vertices: [4608x3 double]
Show all properties
از دستور view مطابق دستور زیر برای تغییر جهت شی می توان استفاده کرد.
view(-151,30) % change the orientation
axis equal off % make the axes equal and invisible

تنظیم میزان شفافیت در نمایش شکل های سه بعدی در نرم افزار متلب
با استفاده از ویژگی FaceAlpha شی پچ، می توان میزان شفافیت شی را تنظیم کرد.
p.FaceAlpha = 0.3; % make the object semi-transparent

اگر ویژگی FaceColor روی ‘none’ تنظیم شود، شی به صورت سیمی ظاهر می شود.
p.FaceColor = 'none'; % turn off the colors

تغییر رنگ و مشخصات ظاهری
با استفاده از تابع colormap می توان رنگ های شی را تغییر داد. همچنین می توان خطوط شکل را محو کرد تا واقعی تر به نظر بیاید.
p.FaceAlpha = 1; % remove the transparency
p.FaceColor = 'interp'; % set the face colors to be interpolated
p.LineStyle = 'none'; % remove the lines
colormap(copper) % change the colormap

اضافه کردن نور
برای اینکه جسم سه بعدی واقعی تر به نظر بیاید، می توان نوری را به آن جسم تاباند.
l = light('Position',[-0.4 0.2 0.9],'Style','infinite')
با تایپ l در Command Window می توان مشخصات نور تعریف شده را مشاهده کرد.
l =
Light with properties:
Color: [1 1 1]
Style: 'infinite'
Position: [-0.4000 0.2000 0.9000]
Visible: on
Show all properties
lighting gouraud

این ویژگیهای شی پچ بر قدرت نور و خواص بازتابی جسم تأثیر میگذارد:
- AmbientStrength – قدرت نور محیط را کنترل می کند
- DiffuseStrength – میزان انتشار نور را کنترل می کند
- SpecularStrength – میزان نور منعکس شده را کنترل می کند
- SpecularExponent – میزان سختی یا نرمی نور منعکس شده را کنترل می کند
- SpecularColorReflectance – نحوه محاسبه رنگ منعکس شده را کنترل می کند.
می توان این ویژگی ها را به صورت جداگانه تنظیم کرد. همچنین برای استفاده از این ویژگیها با استفاده از مقادیر از پیش تعیینشده که ظاهر فلزی (Metal)، براق (Shiny) یا کدر (Dull) را ایجاد می کند، می توان از دستور Material استفاده کرد.
material shiny

با استفاده از ویژگی Position، می توان موقعیت نور را تنظیم کرد. این موقعیت در مختصات کارتزین یعنی به صورت x، y، z تعریف می شود.
l.Position = [-0.1 0.6 0.8]

l =
Light with properties:
Color: [1 1 1]
Style: 'infinite'
Position: [-0.1000 0.6000 0.8000]
Visible: on
Show all properties
هیچ دیدگاهی نوشته نشده است.