جاوا ، جاوا ، جاوا: حل مسئله شی گرا ، 2022E

ساخت وبلاگ

A یک شکل هندسی است که یک ساختار بازگشتی را نشان می دهد. هنگامی که به قطعات تقسیم می شود ، هر قسمت نسخه کوچکتر از کل است.

الگوهای فراکتال در بسیاری از شرایط و مکان ها رخ می دهد. به عنوان مثال ، اگر در طی یک سال گذشته به نمودار میانگین صنعتی داو جونز (DJIA) نگاه کنید ، نمودار برای هر روز شبیه به نمودار هر ماه است که شبیه نمودار هر سال است و غیرهوادهر قسمت یک نسخه در مقیاس کاهش یافته از کل است.

فراکتال ها نیز در طول طبیعت رخ می دهند. اگر به یک خط ساحلی از یک هواپیما نگاه کنید ، شکل هر قسمت از ساحل ، مهم نیست که مقیاس کوچک باشد ، شبیه شکل کل خط ساحلی است. اگر به یک درخت نگاه کنید ، هر شاخه از درخت از نظر شکل با کل درخت مشابه است.

بنابراین ، الگوهای فراکتال در اطراف ما است. به دلیل شفاب بودن و تقسیم پذیری آنها ، فراکتال ها برای برنامه نویسی بازگشتی مناسب هستند. ترسیم الگوهای بازگشتی نیز یک روش عالی برای نشان دادن نحوه استفاده از پارامترها برای ایجاد کلی در طراحی روش است.

زیرمجموعه 12. 5. 1 میادین تو در تو

در اوایل این فصل ، ما یک تعریف بازگشتی برای ترسیم الگوی مربع های تو در تو تهیه کردیم (شکل 12. 2. 3). حال بیایید یک روش بازگشتی ایجاد کنیم که در واقع الگوی را ترسیم کند. برای این الگوی ، مورد پایه نقاشی مربع است. پرونده بازگشتی ، اگر بخش های بیشتری مورد نظر باشد ، ترسیم الگوهای کوچکتر در مربع است:

الگوریتم 12. 5. 1. مربع های تو در تو

نکته مهم برای این الگوریتم مشخص کردن دقیقاً منظور ما از "اگر تقسیمات بیشتر مورد نظر باشد" چیست. به عبارت دیگر ، دقیقاً چگونه بازگشت را کنترل می کنیم؟در تعریف قبلی ما از الگوی ، از طول طرف برای کنترل الگوریتم استفاده کردیم. وقتی (طرف geq 5 متن<,>) ما دوباره برگشتیم.

یکی دیگر از روشهای کلی تر برای انجام این کار ، توصیف ساختار فراکتال از نظر سطح آن است. برای مربع های تو در تو ، الگوی سطح صفر فقط شکل مربع اساسی خواهد بود (شکل 12. 5. 2). یک الگوی سطح یک می تواند شکل مربع اساسی به علاوه یک مربع داخلی و غیره باشد. هرچه سطح آن بالاتر باشد ، ما را در زیر بخش تر می کنیم. بنابراین ، یکی از راه های کنترل بازگشتی ، استفاده از یک پارامتر سطح به عنوان پارامتر بازگشت است - به عنوان پارامتر کنترل بازگشت:

الگوریتم 12. 5. 3. مربع های تو در تو در سطح.

چه پارامترهای دیگری برای این روش نیاز خواهیم داشت؟اگر بخواهیم یک مستطیل رسم کنیم، به پارامترهایی برای مختصات x و y آن نیاز داریم. ما همچنین به یک پارامتر برای طول اضلاع مربع نیاز داریم. موضوع دیگری که باید تصمیم بگیریم این است که طول اضلاع در هر سطح چقدر باید تغییر کند. آیا طول باید با مقدار ثابت، نسبت ثابت یا عامل دیگری تغییر کند؟برای اجازه دادن به این نوع انعطاف پذیری، اجازه دهید از پارامتر دیگری برای این مقدار استفاده کنیم.

این ملاحظات طراحی روش نشان داده شده در فهرست 12. 5. 4 را پیشنهاد می کند. توجه داشته باشید که باید یک پارامتر Graphics نیز ارائه کنیم تا متد بتواند از متد drawRect() برای ترسیم مربع استفاده کند. همانطور که تصمیم گرفتیم، پارامتر سطح بازگشت را کنترل می کند. توجه داشته باشید که مقدار آن در تماس بازگشتی 1 کاهش می یابد. این اطمینان حاصل می کند که سطح در نهایت به 0 می رسد و بازگشت متوقف می شود.

در نهایت، به استفاده از پارامتر دلتا توجه کنید، که برای تغییر طول اضلاع به مقدار ثابت، 2 * دلتا، در هر سطح استفاده می شود. همچنین برای محاسبه مختصات x و y برای مکان سطح بعدی جعبه ها (locX + دلتا، locY + دلتا) استفاده می شود. اما مقدار دلتا در تمام سطوح ثابت می ماند. این منجر به الگویی می شود که در آن "شکاف" بین مربع های تو در تو ثابت است.

اصل 12. 5. 5. طراحی موثر: سطوح بازگشتی.

تمرینات تمرینات خودآموز

1 . جعبه های تو در تو

کد در اینجا متد drawBoxes() را با یک رابط کاربری گرافیکی ساده ترکیب می کند تا یک تصویر سطح 9 از جعبه های تودرتو ترسیم کند.

روش بازگشتی را با یک روش تکراری معادل جایگزین کنید.: در هر تکرار، باید مختصات x- و y- مکان مربع و طول ضلع آن را تغییر دهید.)

بخش فرعی 12. 5. 2 واشر Sierpinski

بیایید اکنون به الگوی واشر Sierpinski که در ابتدای این فصل معرفی کردیم بازگردیم. این یک الگوی فراکتال بسیار جالب تر است (شکل 12. 5. 6). شکل کلی الگو مانند مثلث است، اما توجه کنید که چگونه مثلث بیرونی به سه مثلث کوچکتر تقسیم می شود. سپس هر یک از آن مثلث ها به سه مثلث کوچکتر تقسیم می شوند. اگر این روند تقسیم و کوچک شدن را ادامه دهید، الگوی سطح هفت نشان داده شده در اینجا را دریافت خواهید کرد.

بیایید یک روش بازگشتی برای ترسیم این الگو ایجاد کنیم. اگر همان استراتژی را که در مثال مربع های تو در تو به کار بردیم دنبال کنیم، الگوریتم زیر به دست می آید:

الگوریتم 12. 5. 7 . واشر Sierpinski.

برای این الگوی مورد پایه ترسیم مثلث اساسی است. موارد بازگشتی ، در صورت تمایل بخش های بیشتری ، ترسیم واشرهای کوچکتر در مثلث است. مجدداً از یک پارامتر سطح برای کنترل عمق بازگشت استفاده خواهیم کرد. هرچه سطح بالاتر باشد ، تقسیمات بیشتری نیز ترسیم می شود.

اگر می خواهیم شکل مثلث بکشیم ، به مختصات سه راس آن نیاز داریم- یعنی یک مختصات X- و Y برای هر راس. روی هم رفته ، این ملاحظات طراحی تعریف روش نشان داده شده در شکل 12. 5. 8 را نشان می دهد.

همانطور که قبلاً توضیح دادیم ، ما از پارامتر سطح به عنوان پارامتر بازگشت برای این روش استفاده می کنیم ، که بازگشتی را کنترل می کند. توجه داشته باشید که هر یک از سه تماس بازگشتی سطح 1 را کاهش می دهد. این اطمینان حاصل می کند که در نهایت سطح برابر خواهد بود و بازگشت متوقف می شود.

توجه داشته باشید که چگونه از سه جفت مختصات استفاده می شود. ترسیم مثلث ساده است. فقط سه خط را از (p1x ، p1y) به (p2x ، p2y) ، از (p2x ، p2y) تا (p3x ، p3y) و از (p3x ، p3y) به (p1x ، p1y) بکشید.

پیچیده ترین قسمت این روش محاسبه رئوس ها برای سه واشر داخلی است. اگر دوباره به شکل 12. 5. 6 نگاه کنید ، متوجه خواهید شد که هر یک از مثلث های داخلی از یکی از راس های مثلث اصلی استفاده می کنند ، به علاوه نقاط میانی دو طرف مجاور. بنابراین ، مثلث در "سمت چپ" از راس سمت چپ (P1X ، P1Y) و نقاط میانی دو خط دیگر از (P1x ، P1Y) تا (P2X ، P2Y) و از (P1X ، P1Y) تا (P3x ، P3X ، استفاده می کند. p3y). همانطور که از ریاضیات دبیرستان به یاد می آورید ، فرمول محاسبه نقطه میانی بخش خط ((x1 ، y1) ) به ((x2 ، y2) ) است

بهترین استراتژی معاملات...
ما را در سایت بهترین استراتژی معاملات دنبال می کنید

برچسب : نویسنده : صدرا ذوالریاستین بازدید : 53 تاريخ : سه شنبه 22 فروردين 1402 ساعت: 12:06