نکات کلیدی
1. بردارها: اجزای سازنده حرکت
یک بردار معمولاً بهصورت یک پیکان ترسیم میشود؛ جهت آن با جایی که پیکان به آن اشاره میکند مشخص میشود و بزرگی آن با طول خود پیکان نشان داده میشود.
بردارها حرکت را تعریف میکنند. بردارها با بزرگی و جهت خود، ساختار دادهای بنیادی برای برنامهنویسی حرکت هستند. آنها تفاوت بین دو نقطه را نشان میدهند و میتوانند برای توصیف موقعیت، سرعت، شتاب و نیروها استفاده شوند. بهجای استفاده از متغیرهای جداگانه x و y، بردارها به ما این امکان را میدهند که حرکت را در یک شیء واحد محصور کنیم، که کد را سادهتر کرده و پایهای برای شبیهسازیهای پیچیدهتر فراهم میآورد.
ریاضیات بردارها ضروری است. جمع، تفریق، ضرب، تقسیم، بزرگی و نرمالسازی بردارها عملیات پایهای برای دستکاری حرکت هستند. این عملیات بهعنوان توابعی در کلاس PVector پیادهسازی شدهاند که به ما اجازه میدهند بهراحتی نیروها را محاسبه و اعمال کنیم، سرعتها را تغییر دهیم و جهت اشیاء را کنترل کنیم. بهعنوان مثال، افزودن یک بردار سرعت به یک بردار موقعیت، یک شیء را حرکت میدهد و نرمالسازی یک بردار به ما یک بردار واحد میدهد که میتوان آن را به هر بزرگی مقیاس کرد.
بردارها کد را ساده میکنند. با استفاده از بردارها، میتوانیم تعداد متغیرهای لازم برای توصیف حرکت را کاهش دهیم. بهجای متغیرهای جداگانه برای x، y، xspeed و yspeed، میتوانیم از دو شیء PVector استفاده کنیم: موقعیت و سرعت. این کار کد را خواناتر و نگهداری آن را آسانتر میکند و پایهای برای شبیهسازیهای پیچیدهتر فراهم میآورد.
2. نیروها: چرایی پشت چگونگی
یک نیرو یک بردار است که باعث شتاب یک شیء با جرم میشود.
نیروها باعث شتاب میشوند. نیروها، که خود نیز بردار هستند، علت تغییرات در سرعت یک شیء هستند. قانون دوم نیوتن (F=ma) کلید درک این است که چگونه نیروها بر حرکت تأثیر میگذارند. یک نیروی اعمالشده بر یک شیء باعث شتاب آن میشود و مقدار شتاب بهطور معکوس با جرم شیء نسبت دارد.
جمعآوری نیروها کلیدی است. چندین نیرو میتوانند بهطور همزمان بر یک شیء تأثیر بگذارند. برای شبیهسازی این، باید تمام نیروهای تأثیرگذار بر یک شیء را جمعآوری کرده و سپس نیروی خالص را به شتاب آن اعمال کنیم. این کار با جمع کردن تمام بردارهای نیرو و سپس تقسیم بر جرم شیء انجام میشود.
نیروها میتوانند ساخته یا مدلسازی شوند. ما میتوانیم نیروها را بهطور دلخواه ایجاد کنیم (مانند باد) یا آنها را بر اساس فیزیک دنیای واقعی مدلسازی کنیم (مانند گرانش، اصطکاک و کشش). کلید این است که جهت و بزرگی نیرو را درک کنیم و سپس آن را بهعنوان یک PVector پیادهسازی کنیم.
3. نوسان: ریتمهای طبیعت
منحنی توسط یک تابع ریاضی تولید میشود که احتمال وقوع هر مقدار خاص را بهعنوان تابعی از میانگین (که معمولاً بهصورت μ، حرف یونانی میو نوشته میشود) و انحراف معیار (σ، حرف یونانی سیگما) تعریف میکند.
زاویهها و حرکت زاویهای. درک زاویهها، سرعت زاویهای و شتاب زاویهای برای شبیهسازی اشیاء چرخشی و نوسانی بسیار مهم است. زاویهها در پردازش بهصورت رادیان اندازهگیری میشوند و میتوانیم از مثلثات (سینوس، کسینوس، تانژانت) برای محاسبه مؤلفههای یک بردار بر اساس زاویهاش استفاده کنیم.
مثلثات برای حرکت. مثلثات به ما این امکان را میدهد که بین مختصات قطبی و کارتیزین تبدیل کنیم، که برای شبیهسازی حرکت دایرهای و سایر رفتارهای نوسانی مفید است. توابع سینوس و کسینوس الگوهای نرم و تکراری تولید میکنند که میتوانند برای کنترل موقعیت اشیاء در طول زمان استفاده شوند.
نوسان با دامنه و دوره. حرکت نوسانی میتواند با دامنهاش (فاصله از مرکز حرکت به هر یک از انتها) و دورهاش (مقدار زمانی که برای یک چرخه کامل طول میکشد) توصیف شود. ما میتوانیم از توابع سینوس و کسینوس برای ایجاد حرکت نوسانی استفاده کنیم و میتوانیم دامنه و دوره را کنترل کنیم تا اثرات مختلفی ایجاد کنیم.
4. سیستمهای ذرهای: پیچیدگی از سادگی
سیستمهای ذرهای به ما این امکان را میدهند که به برخی ویژگیهای پیشرفته برنامهنویسی شیءگرا، بهویژه وراثت و چندریختی بپردازیم.
بسیاری از اشیاء، یک سیستم. سیستمهای ذرهای روشی برای مدیریت تعداد زیادی از اشیاء مستقل هستند که معمولاً با اشکال یا نقاط ساده نمایش داده میشوند. آنها برای شبیهسازی پدیدههای طبیعی مانند آتش، دود و آبشارها مفید هستند.
طراحی شیءگرا. سیستمهای ذرهای نمونهای عالی از برنامهنویسی شیءگرا هستند. ما یک کلاس ذره ایجاد میکنیم تا ویژگیها و رفتارهای یک ذره واحد را توصیف کنیم و سپس یک کلاس سیستم ذرات ایجاد میکنیم تا مجموعهای از ذرات را مدیریت کنیم. این کار به ما اجازه میدهد کد خود را سازماندهی کنیم و سیستمهای پیچیدهای را از اجزای ساده بسازیم.
ArrayLists برای سیستمهای پویا. ArrayLists یک ساختار داده مفید برای مدیریت مجموعهای از اشیاء هستند که میتوانند در طول زمان بزرگ و کوچک شوند. آنها به ما اجازه میدهند اشیاء را به لیست اضافه و از آنها حذف کنیم، که برای شبیهسازی سیستمهای ذرهای که در آنها ذرات متولد و میمیرند، ضروری است.
5. کتابخانههای فیزیک: استفاده از ابزارهای موجود
با پیشرفت به دنیای پیچیدهتری از اشیاء و نیروهای متعدد (که در فصل 2 معرفی خواهیم کرد)، مزایای PVector بیشتر نمایان خواهد شد.
Box2D برای برخوردها. Box2D یک موتور فیزیک قدرتمند است که برخوردها، مفاصل و سایر شبیهسازیهای پیچیده فیزیکی را مدیریت میکند. این موتور در یک سیستم مختصات دنیای واقعی (متر، کیلوگرم، ثانیه) عمل میکند و نیاز دارد که ما بین دنیای آن و دنیای مبتنی بر پیکسل خود ترجمه کنیم.
toxiclibs برای ذرات و فنرها. موتور VerletPhysics کتابخانه toxiclibs برای شبیهسازی سیستمهای ذرهای با اتصالات فنری بسیار مناسب است. این موتور از ادغام Verlet استفاده میکند که روشی سریع و کارآمد برای شبیهسازی حرکت است. همچنین در سیستم مختصات پردازش عمل میکند که استفاده از آن را آسانتر میکند.
کتابخانهها جایگزین درک نمیشوند. در حالی که کتابخانههای فیزیک میتوانند ریاضیات را برای ما انجام دهند، هنوز هم مهم است که اصول بنیادی بردارها، نیروها و حرکت را درک کنیم. این دانش به ما اجازه میدهد که از کتابخانهها بهطور مؤثر استفاده کنیم و شبیهسازیهای سفارشی خود را ایجاد کنیم.
6. عوامل خودمختار: دادن ذهن به اشیاء
با بررسی تکنیکهای مدلسازی عوامل خودمختار، به اشیاء بیجان خود زندگی میبخشیم و به آنها اجازه میدهیم که بر اساس درک خود از محیطشان تصمیماتی درباره حرکاتشان بگیرند.
عوامل درک و عمل میکنند. عوامل خودمختار اشیائی هستند که میتوانند محیط خود را درک کرده و درباره نحوه حرکت تصمیم بگیرند. آنها صرفاً تحت تأثیر نیروها قرار نمیگیرند؛ بلکه اهداف و خواستههای خود را دارند.
رفتارهای هدایت. رفتارهای هدایت، مانند جستجو، فرار و رسیدن، الگوریتمهایی هستند که به عوامل اجازه میدهند بهطور طبیعی در محیط خود حرکت کنند. این رفتارها بر اساس مفهوم سرعت مطلوب است که یک بردار است که به سمت جهتی که عامل میخواهد حرکت کند اشاره میکند.
نیروی هدایت = مطلوب - کنونی. نیروی هدایت با کم کردن سرعت کنونی عامل از سرعت مطلوب آن محاسبه میشود. این نیرو سپس به شتاب عامل اعمال میشود و باعث تغییر جهت آن میشود.
7. اتوماتای سلولی: قوانین و ظهور
یک سیستم پیچیده معمولاً بهعنوان سیستمی تعریف میشود که "بیش از مجموع اجزای آن است."
قوانین ساده، نتایج پیچیده. اتوماتای سلولی (CA) سیستمهایی از سلولها هستند که بر روی یک شبکه زندگی میکنند و وضعیت خود را بر اساس مجموعهای از قوانین ساده تغییر میدهند. حتی با قوانین ساده، CAها میتوانند رفتارهای پیچیده و غیرقابل پیشبینی از خود نشان دهند.
CAهای یکبعدی. CAهای ابتدایی ولفرم سیستمهای یکبعدی با دو حالت ممکن (0 یا 1) و همسایگی سه سلولی هستند. با وجود سادگی آنها، میتوانند الگوهای متنوعی از جمله فراکتالها تولید کنند.
CAهای دو بعدی. بازی زندگی یک CA دو بعدی با دو حالت (زنده یا مرده) و همسایگی هشت سلولی است. این بازی نشان میدهد که چگونه قوانین ساده میتوانند منجر به رفتارهای پیچیده و ظهور یافته، مانند الگوهای پایدار، نوسانسازها و جتها شوند.
8. فراکتالها: هندسه طبیعت
یک فراکتال یک شکل هندسی خشن یا تکهتکه است که میتواند به بخشهایی تقسیم شود، که هر یک از آنها (حداقل بهطور تقریبی) یک کپی با اندازه کاهشیافته از کل است.
خودشباهتی در تمام مقیاسها. فراکتالها اشکال هندسی هستند که خودشباهتی را نشان میدهند، به این معنی که در مقیاسهای مختلف مشابه به نظر میرسند. آنها اغلب در طبیعت یافت میشوند، مانند درختان، سواحل و برفریزهها.
بازگشت کلیدی است. فراکتالها معمولاً با استفاده از بازگشت تولید میشوند، تکنیکی که در آن یک تابع خود را فراخوانی میکند. این کار به ما اجازه میدهد الگوهای پیچیدهای را با تکرار یک قانون ساده ایجاد کنیم.
فراکتالهای قطعی در مقابل تصادفی. فراکتالهای قطعی با اعمال یک مجموعه ثابت از قوانین تولید میشوند، در حالی که فراکتالهای تصادفی شامل تصادف هستند. هر دو نوع فراکتال میتوانند برای ایجاد الگوهای بصری جالب و پیچیده استفاده شوند.
9. الگوریتمهای ژنتیکی: تکامل راهحلها
هدف این کتاب پر کردن جعبهابزار شماست. اگر تنها چیزی که میدانید تصادفی است، آنگاه تفکر طراحی شما محدود است.
اصول تکاملی در کد. الگوریتمهای ژنتیکی (GA) از فرآیند تکامل بیولوژیکی الهام گرفته شدهاند. آنها از مفاهیمی مانند وراثت، تنوع و انتخاب برای حل مسائل استفاده میکنند.
ژنوتیپ و فنوتیپ. در یک GA، ژنوتیپ کد ژنتیکی یک عنصر (بهعنوان مثال، یک آرایه از اعداد) است و فنوتیپ بیان آن کد (بهعنوان مثال، یک شکل یا رفتار) است. تابع تناسب ارزیابی میکند که فنوتیپ چقدر خوب عمل میکند.
انتخاب، ترکیب و جهش. GAها از انتخاب برای انتخاب مناسبترین اعضای یک جمعیت، ترکیب برای ترکیب کد ژنتیکی دو والد و جهش برای معرفی تنوع استفاده میکنند. این مراحل بارها و بارها تکرار میشوند تا یک جمعیت به سمت یک نتیجه مطلوب تکامل یابد.
10. شبکههای عصبی: یادگیری از تجربه
هدف این کتاب پر کردن جعبهابزار شماست. اگر تنها چیزی که میدانید تصادفی است، آنگاه تفکر طراحی شما محدود است.
الهامگرفته از مغز. شبکههای عصبی مدلهای محاسباتی هستند که از ساختار و عملکرد مغز انسان الهام گرفتهاند. آنها برای شناسایی الگو، پیشبینی و کنترل استفاده میشوند.
پرسپترونها: نورونهای ساده. یک پرسپترون سادهترین شبکه عصبی است که از یک یا چند ورودی، یک پردازشگر و یک خروجی واحد تشکیل شده است. این شبکه از وزنها برای تنظیم ورودیها و یک تابع فعالسازی برای تولید خروجی استفاده میکند.
یادگیری از طریق بازخورد. شبکههای عصبی میتوانند با تنظیم وزنهای خود بر اساس بازخورد از محیطشان یاد بگیرند. این کار میتواند از طریق یادگیری تحت نظارت (با معلم)، یادگیری بدون نظارت (بدون معلم) یا یادگیری تقویتی (از طریق مشاهده) انجام شود.
آخرین بهروزرسانی::
نقد و بررسی
کتاب طبیعت کد به خاطر توضیحات قابل فهمش در مورد موضوعات پیچیدهای مانند شبیهسازیهای فیزیکی، هوش مصنوعی و سیستمهای طبیعی با استفاده از پردازش، مورد تحسین قرار گرفته است. خوانندگان از نوشتار شفاف، مثالهای عملی و رویکرد بصری آن در آموزش مفاهیم برنامهنویسی قدردانی میکنند. بسیاری از آنها این کتاب را برای یادگیری هم کدنویسی و هم اصول علوم طبیعی مفید دانستهاند. این کتاب برای مبتدیان و برنامهنویسان با تجربه به یک اندازه توصیه میشود و بهویژه به خاطر پوشش جامع آن در زمینه سیستمهای ذرهای، الگوریتمهای ژنتیکی و شبکههای عصبی مورد ستایش قرار گرفته است. برخی از خوانندگان اشاره کردند که ممکن است در برخی زمینهها عمق بیشتری داشته باشد.
Similar Books






