فهرست مطالب:
- مرحله 1: برای حلقه
- مرحله 2: از حلقه برای حل مسائل ریاضی استفاده کنید
- مرحله 3: برای طراحی حلقه
- مرحله 4: از Loop برای ترسیم نقطه گرد تصادفی استفاده کنید
- مرحله 5: از Loop to Draw Line استفاده کنید
- مرحله 6: برای Loop Nested
- مرحله 7: while Loop
- مرحله 8: منبع
تصویری: راهنمای برنامه نویسی جالب برای طراح-کنترل فرآیند برنامه-بیانیه حلقه: 8 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:58
کنترل فرآیند برنامه- بیانیه حلقه
از این فصل ، شما با یک بیانیه مهم و قدرتمند نقطه حلقه در ارتباط خواهید بود.
قبل از خواندن این فصل ، اگر می خواهید 10،000 حلقه در برنامه بکشید ، فقط می توانید با یک روش وحشتناک انجام دهید. یعنی نوشتن 10،000 خط کد بیضی. آن طراحان تنبل کد که می خواهند کارآیی خود را به هر طریقی افزایش دهند ، قطعاً اجازه نمی دهند این اتفاق بیفتد. بنابراین ، دستور حلقه ایجاد می شود. با استفاده از این عبارت ، می توانید قدرت اتوماسیون رایانه را بصورت شهودی احساس کنید.
مرحله 1: برای حلقه
بسیاری از دستورات حلقه وجود دارد که از جمله آنها For Loop بیشترین استفاده را دارد. همه ما می دانیم که ترسیم عملکرد به طور مداوم در گردش است. از اولین جمله در ابتدا شروع کنید ، از بالا به پایین تا آخرین جمله اجرا می شود. پس از اتمام عملیات ، دوباره از جمله اول شروع می شود. برای دستور کمی شبیه به تابع draw است. کد درون for statement می تواند مکررا اجرا شود.
در اینجا ساختار گرامری آن آمده است:
برای (بیان 1 ؛ بیان 2 ؛ بیان 3) {
بدن حلقه
}
بدیهی است ، جملات درون بدن حلقه همان چیزی است که ما انتظار داشتیم بارها و بارها اجرا شود. عبارت 1 برای مقداردهی اولیه و اختصاص اولین مقدار به متغیر حلقه استفاده می شود. عبارت 2 برای شرط حلقه است. عبارت 3 مقدار متغیر حلقه را به روز می کند.
متغیر حلقه چیست؟ در واقع معادل یک متغیر محلی است. بیایید نگاهی به یک نوشته کامل بیندازیم.
برای (int i = 0؛ i <10؛ i ++) {
بدن حلقه
}
برای تحقق عملکرد حلقه ، دستور عمدتا متکی به یک متغیر محلی است که در خاتمه حلقه مورد استفاده قرار می گیرد. متغیر محلی در مثال بالا i است. عبارت 1 مقداردهی اولیه متغیر محلی را تکمیل کرده است. بعداً ، هر بار که حلقه یکبار کار می کند ، این متغیر باید به روز شود. در مثال بالا ، i ++ در عبارت 3 برای تحقق عملکرد به روز رسانی استفاده می شود. از طریق آن ، هر بار که به روز می شود ، متغیر 1 افزایش می یابد. در پایان ، کد درون بدنه حلقه نمی تواند به طور نامحدود حلقه شود ، در غیر این صورت جملات اخیر قابل اجرا نیستند. بنابراین ، ما به یک شرط پایانی نیاز داریم. اکسپرس 2 فقط برای آن مناسب است. در اینجا ، برنامه قضاوت می کند که آیا من کمتر از 10 هستم. اگر چنین است ، سپس به کار خود ادامه دهید. اگر اینطور نیست ، از حلقه بیرون بروید.
بنابراین ، دنباله عمل برای عبارت درست به این شکل است.
بیان 1 (مقداردهی اولیه متغیر محلی)
بیان 2 (راضی است ، سپس به کار خود ادامه دهید)
بدن حلقه (اولین گردش)
عبارت 3 (به روز رسانی)
بیان 2 (راضی است ، سپس به کار خود ادامه دهید)
بدن حلقه (دور دوم)
عبارت 3 (به روز رسانی)
بیان 2 (راضی است ، سپس به کار خود ادامه دهید)
بدن حلقه (گردش سوم)…
عبارت 3 (به روز رسانی)
بیان 2 (راضی نیست ، سپس از حلقه بیرون بروید)
شما می توانید این دنباله اجرا را چندین بار در سر خود شبیه سازی کنید. اما درک کد بدون تایپ یکبار دستی با آن غیرممکن است. وقتی می خواهیم مفهوم عجیبی پیدا کنیم ، می توانیم مقدار را در کنسول از طریق دستور println چاپ کنیم.
مثال کد (5-1): void setup () {
برای (int i = 0؛ i <10؛ i ++) {
println ("اجرا") ؛
}
}
می توانید تعداد خروجی اجرا شده در کنسول را بشمارید. در اینجا ، دقیقاً 10 است. این به شما می گوید که چند بار کد موجود در بدن حلقه اجرا شده است. با این حال ، ما هنوز نمی توانیم تشخیص دهیم که واقعاً چه تغییراتی در حلقه رخ داده است. بنابراین ما می توانیم سعی کنیم شخصیت "متغیر i" را تغییر دهیم و ببینیم چه اتفاقی می افتد.
مثال کد (5-2): void setup () {
برای (int i = 0؛ i <10؛ i ++) {
println (i) ؛
}
}
اکنون ، می توانیم مشاهده کنیم که مقدار i در بدن حلقه به طور مداوم در حال افزایش است. بعداً ، می توانیم از این مقدار برای درک روند فعلی حلقه استفاده کنیم.
در مثال کد (5-2) ، مقدار i از 0 به 9 تغییر می کند. در مقایسه با زمان حلقه واقعی ، به نظر می رسد همیشه 1 کمتر دارد. اگر عادت ندارید ، عبارت داخل کروشه for را می توان به صورت زیر نوشت:
برای (int i = 1 ؛ i <= 10 ؛ i ++)
بنابراین ، من به درستی با زمان حلقه مطابقت دارم. معنی "<=" کمتر از و برابر است. بنابراین وقتی من برابر 10 می شوم ، باز هم شرط را برآورده می کند. بنابراین ، در مقایسه با نوشتن در i <10 یکبار دیگر عمل می کند. اگرچه از 1 شروع می شود ، زمان حلقه هنوز 10 است. البته ، اگر چیز خاصی لازم نیست ، می خواهم به شما پیشنهاد کنم که روش نوشتن را در مثال در ابتدا بعداً بردار یا آرایه ای را به شما معرفی می کنیم ، که هر دو عنصر خود را با زیرنویس آن به دست می آورند. و زیرنویس های پیش فرض همگی از 0 شروع می شوند. تعریف مقدار اولیه 0 عدد نسبتاً متداول است.
در مثال بالا ، اگر بنویسیم i فراتر از 0 است ، pogram سقوط می کند. از آنجا که متغیر به طور مداوم در حال افزایش است ، هرگز این شرط را برآورده نمی کند. این درست مانند این است که هرگز نمی توان آن را متوقف کرد تا برنامه به یک حلقه بی پایان برسد.
متغیرهای محلی در دستور for نه تنها می توانند انواع پلاستیک را اعلام کنند ، بلکه متغیرها را در انواع نقاط شناور نیز اعلام می کنند. به عنوان مثال ، می توان آن را به صورت (float i = 0 ؛ i <10 ؛ i + = 0.02) نوشت.
مرحله 2: از حلقه برای حل مسائل ریاضی استفاده کنید
آیا هنوز داستان گاوس ریاضیدان در دوران کودکی خود را به خاطر دارید؟ در آن زمان ، گواس 10 ساله بود. معلم او می خواست در کلاس وظیفه ای تعیین کند و س wasال این بود
1+2+3+4……+97+98+99+100=?
اگر با دستان خود محاسبه کنید ، زمان زیادی از شما می گیرد. اما به نظر می رسد گوآس روش جمع بندی دنباله های حسابی را قبلاً کشف کرده است. بنابراین درست پس از ارائه س ،ال ، او به راحتی پاسخ را بیان کرد ، که معلم او را بسیار شگفت زده کرده بود.
اکنون ، ممکن است هنوز به خاطر نیاوریم که جمع توالی حساب چیست ، اما می توانیم پاسخ را به شیوه ای بدوی و خشن دریافت کنیم. و این برای حلقه است. از آنجا که شمارش رایانه فقط یک تکه کوچک است ، باید س theال را به زبانی توصیف کنیم که توسط رایانه قابل تشخیص باشد ، بنابراین می توانیم به راحتی پاسخ خود را دریافت کنیم.
مثال کد (5-3):
void setup () {
پاسخ int = 0 ؛
برای (int i = 1؛ i <= 100؛ i ++) {
پاسخ += i ؛
}
println (پاسخ) ؛
}
من معتقدم نتیجه ای که به دست می آورید با پاسخی که Guass گزارش کرد یکسان است: 5050 است!
نکات: نام متغیرهای محلی در حلقه for را می توان به دلخواه با رعایت مقررات نامگذاری متغیرها تغییر داد. می توانید آن را بنویسید (int k = 1 ؛ k <= 100؛ k ++). اگر هیچ شرایط خاصی رخ نداد ، i را به عنوان نام متغیر پیش فرض می کند.
مرحله 3: برای طراحی حلقه
پس از مجموعه ای از ملافه های به ظاهر خسته کننده ، بالاخره می توانیم وارد بخش جالب تری شویم. این برای حلقه برای ترسیم تصاویر استفاده می شود. اکنون می توانیم آن محاسبه خسته کننده ریاضی را کنار بگذاریم. ما طراحان نسبت به گرافیک حساس تر هستیم.
For Loop برای رسم یک آرایه دایره ای استفاده کنید
هنگامی که می خواهیم از حلقه برای نشان دادن گروهی از عناصر تکراری استفاده کنیم ، باید از قبل از رابطه عددی این عناصر اطمینان حاصل کنیم ، سپس می توانیم به جای انجام کارهای تکراری عظیم ، از حلقه برای درک راحت آن استفاده کنیم. فرض کنید اگر بخواهیم یک ردیف دایره را به طور مساوی در جهت افقی رسم کنیم. مختصات مجازی آن بدون تغییر است در حالی که مختصات افقی آن تغییر می کند. و از چپ به راست ، مختصات افقی دائما در حال افزایش است و فاصله افزایش یافته یکسان است. در این زمان ، ما می توانیم از حلقه i in برای حل مختصات افقی هر دایره استفاده کنیم.
مثال کد (5-4): void setup () {
اندازه (700 ، 700) ؛
سابقه (83 ، 51 ، 194) ؛
noStroke ()؛
}
void draw () {
برای (int i = 0؛ i <7؛ i ++) {
بیضی (50.0 + i * 100.0 ، ارتفاع/2.0 ، 80.0 ، 80.0) ؛
}
}
50 مخفف موقعیت شروع اولین دایره در سمت چپ است. 100 در i * 100 نشان دهنده افزایش فاصله است.
مرحله 4: از Loop برای ترسیم نقطه گرد تصادفی استفاده کنید
موقعیت گرافیکی فوق قابل پیش بینی است. این باعث می شود علاقه زیادی به حداقل برسد. ما می توانیم از تابع تصادفی که در فصل قبل به آن اشاره کردیم استفاده کنیم و سعی کنیم آن را در تابع رسم بنویسیم.
مثال کد (5-5):
void setup () {
اندازه (700 ، 700) ؛
پس زمینه (0) ؛
noStroke ()؛
}
void draw () {
پس زمینه (0) ؛
برای (int i = 0؛ i <10؛ i ++) {
float randomWidth = تصادفی (60.0) ؛
بیضی (تصادفی (عرض) ، تصادفی (ارتفاع) ، randomWidth ، randomWidth) ؛
}
}
در اینجا دلیل این که موقعیت دایره به طور مداوم چشمک می زند این است که هر بار که تابع به طور تصادفی برای یک بار عمل می کند ، نتیجه تصادفی است. از آنجا که رسم عملکرد به طور پیش فرض 60 فریم در ثانیه اجرا می شود ، بنابراین هر 10 دایره کشیده شده در یک ثانیه موقعیت آن را برای 60 بار تغییر می دهد. این فلاش سریع باعث می شود تصویر بیش از 10 دایره داشته باشد. تغییر مقدار ساده در برنامه جلوه ای کاملاً متفاوت را برای شما به ارمغان می آورد. با اصلاح شرایط ترمینال می توانیم زمان حلقه را تغییر دهیم. وضعیت پایانه در تصویر زیر i <100 است
- در اینجا اثر زمانی که شرایط پایانه i <1000 است:
- تصادفی
- اگر نمی خواهم موقعیت دایره به طور تصادفی و همچنین فلش آن ایجاد شود ، چه کاری می توانم انجام دهم؟ یک روش ایجاد و ذخیره متغیرهای مستقل برای هر دایره و راه اندازی اولیه این متغیرها در راه اندازی است. به این متغیرها یک مقدار تصادفی اختصاص دهید. بنابراین ، هنگام استفاده از تابع رسم در قرعه کشی ، چیزی که ما استناد کردیم مقدار ذخیره شده در متغیرها است. در هر زمان تغییر نخواهد کرد. برای رسم 10 دایره می توانیم از این روش استفاده کنیم. اما اگر بخواهیم 1000 دایره یا 10،000 دایره بکشیم ، چطور؟ اگر از این روش سنتی برای ساختن این متغیرها و نامگذاری آن استفاده کنیم ، بسیار مشکل ساز خواهد بود. ما مجبور نیستیم روش ساخت متغیر جدیدی را بیاموزیم. در اینجا یک روش انعطاف پذیر است که می تواند به ما در رسیدن به این هدف کمک کند. یعنی استفاده از randomSeed. حال ، بیایید نگاهی به تأثیر آن پس از استفاده بیاندازیم. مثال کد (5-6): [cceN_cpp theme = "dawn"] void setup () {size (700، 700)؛ پس زمینه (0) ؛ noStroke ()؛}
-
void draw () {
پس زمینه (0) ؛
تصادفی (1) ؛
برای (int i = 0؛ i <10؛ i ++) {
float randomWidth = تصادفی (20.0 ، 60.0) ؛
بیضی (تصادفی (عرض) ، تصادفی (ارتفاع) ، randomWidth ، randomWidth) ؛
}
} [/cceN_cpp]
در مقایسه با کد قبلی ، هیچ تغییری ندارد مگر اینکه محدوده شعاع دایره را از جمله 10 تا بیشتر از 30 با جمله ofSeedRandom تغییر دهید. پس از افزودن این جمله ، گرافیک ثابت به نظر می رسد.
فرمت فراخوانی:
randomSeed (a) ؛
در میان این قالب ، تنظیم a دانه است. شما باید یک عدد صحیح را پر کنید (مقدار نقطه شناور را در P5 بنویسید ، اشتباه نخواهد کرد اما آن را به عنوان یک عدد صحیح در نظر بگیرید). عملکرد randomSeed تنظیم دانه برای مقدار تصادفی است. سپس آرایه تصادفی متفاوتی را با توجه به دانه های مختلف تولید می کند. پس از آن ، ما تابع تصادفی را فرا می خوانیم تا نتیجه بازگشت قطعی باشد. در اینجا ، قطعی برای نتیجه یک مقدار مشخص نیست بلکه برای آرایه ایجاد شده است. به این معنی که نتیجه بازگشت نسبت به زمانهای فراخوانی قطعی است.
مثال کد (5-7): [cceN_cpp theme = "dawn"] void setup () {
randomSeed (0) ؛
برای (int i = 0؛ i <5؛ i ++) {
println (تصادفی (10)) ؛
}
} [/cceN_cpp]
اکنون ما برای انجام آزمایش از println استفاده می کنیم. پس از استفاده از randomSeed ، هر بار که برنامه را می بندید و برنامه را مجدداً راه اندازی می کنید ، به رشته ای با نتیجه مشابه باز می گردد. مقدار یک به یک با دنباله مطابقت دارد. اگر آن را حذف کنید ، هر بار به مقدار متفاوتی برمی گردد. چرا این تنظیم را دارد؟ دلیل آن این است که مقدار تصادفی خود در برنامه شبه تصادفی است. نتیجه تصادفی به نظر می رسد اما در واقع با یک روش محاسبه ثابت و تکرارپذیر تولید می شود. معادل تعیین مقدار اولیه برای randomSeed است ، سپس نتیجه زیر با توجه به این دانه محاسبه می شود. با این حال ، اگر بذر را تعیین نکنیم ، برنامه به طور پیش فرض از زمان فعلی سیستم برای تولید بذر استفاده می کند. بنابراین نتیجه هر عملیات متفاوت است. مثال زیر می تواند به شما در درک بهتر randomSeed کمک کند.
کد مثال (5-8): [cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700) ؛
پس زمینه (0) ؛
noStroke ()؛
}
void draw () {
randomSeed (1) ؛
برای (int i = 0؛ i <10؛ i ++) {
float randomWidth01 = تصادفی (10 ، 60) ؛
بیضی (تصادفی (عرض) ، تصادفی (ارتفاع) ، randomWidth01 ، randomWidth01) ؛
println (randomWidth01) ؛
}
تصادفی (1) ؛
برای (int i = 0؛ i <10؛ i ++) {
float randomWidth02 = تصادفی (10 ، 60) ؛
بیضی (تصادفی (عرض) ، تصادفی (ارتفاع) ، randomWidth02 ، randomWidth02) ؛
println (randomWidth02) ؛
}
} [/cceN_cpp]
سعی کنید دوم randomSeed (1) را به randomSeed (0) تغییر دهید و نتایج نهایی را مقایسه کنید.
نکات: در P5 ، ما فقط باید تابع noLoop را در انتهای قرعه کشی کنیم تا بتوانیم همان اثر را بدست آوریم. وظیفه آن خاتمه دادن به برنامه است. در طبیعت با اصول کار فوق کاملاً متفاوت است.
مرحله 5: از Loop to Draw Line استفاده کنید
پس از تسلط بر استفاده از randomSeed ، می توانیم عملکرد طراحی را تغییر دهیم. به عنوان مثال ، طراحی دایره را به نقاشی خطی تغییر دهید. تنها در صورت طراحی برخی از مقررات در حال تغییر تا انتهای خط ، می توانیم از خطوط زیادی برای ایجاد یک الگوی منحصر به فرد استفاده کنیم.
مثال کد (5-9):
[cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700) ؛
پس زمینه (0) ؛
}
void draw () {
randomSeed (0) ؛
برای (int i = 0؛ i <2000؛ i ++) {
شناور x1 = عرض/2.0 ؛
float x2 = تصادفی (50.0 ، 650.0) ؛
سکته مغزی (255 ، 20) ؛
خط (x1 ، 50 ، x2 ، 650) ؛
}
} [/cceN_cpp]
برس ساده ایجاد کنید
دوباره به حلقه حلقه برگردید. مثالهای فوق تعاملی نیستند. اگر می خواهیم نتیجه را جالب تر کنیم ، نمی توانیم ترکیب mouseX و mouseY را در کد خود فراموش کنیم.
مثال کد (5-10):
[cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700) ؛
پس زمینه (255) ؛
noStroke ()؛
}
void draw () {
برای (int i = 0؛ i <1000؛ i ++) {
پر (0 ، 30) ؛
float x = mouseX + random (-50 ، 50) ؛
شناور y = mouseY + تصادفی (-50 ، 50) ؛
بیضی (x ، y ، 2 ، 2) ؛
}
} [/cceN_cpp]
یک برس "نقاط پراکندگی" ایجاد می شود. از آنجا که هر نقطه گرد کوچک فشرده در موقعیت ماوس قرار دارد ، می تواند جهت های محدودی را از چهار جهت چپ ، راست ، بالا و پایین حرکت دهد. بنابراین شکل نهایی گسترش برس شبیه به یک مربع است.
مثال کد (5-11):
[cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700) ؛
پس زمینه (255) ؛
noStroke ()؛
}
void draw () {
برای (int i = 0؛ i <1000؛ i ++) {
نسبت شناور = mouseX/(float) عرض؛
float x = mouseX + random (-50 ، 50) ؛
شناور y = mouseY + تصادفی (-50 ، 50) ؛
پر (0 ، نسبت * 255 ، 255 * (1 - نسبت) ، 30) ؛
بیضی (x ، y ، 2 ، 2) ؛
}
}
[/cceN_cpp]
اگر از مقدار mouseX برای تأثیر بر رنگ پر کردن استفاده کنیم ، یک گرادیان رنگ جادویی بسیار بیشتری به دست می آوریم.
مرحله 6: برای Loop Nested
برای حلقه می توان تو در تو کرد. می توانید دوباره حلقه for را در حلقه for بنویسید. وقتی نیاز به کشیدن ماتریس نقطه دو بعدی دارید ، می توانید این روش را انتخاب کنید.
مثال کد (5-12):
[cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700 ، P2D) ؛
پس زمینه (202 ، 240 ، 107) ؛
}
void draw () {
پر کردن (0) ؛
برای (int i = 0؛ i <5؛ i ++) {
برای (int j = 0؛ j <5؛ j ++) {
شناور x = 150 + i * 100 ؛
شناور y = 150 + j * 100 ؛
بیضی (x ، y ، 60 ، 60) ؛
println (i + ":" + j)؛
}
}
}
[/cceN_cpp]
برای استفاده از حلقه تو در تو برای اولین بار ، باید روابط منطقی آن را مشخص کنید. پیاده سازی کد در برنامه همیشه از بالا به پایین است. بنابراین ، اولین اجرا شده قطعاً بالاترین حلقه است. هر بار که حلقه خارجی یکبار کار می کند ، حلقه داخلی به طور مداوم کار می کند تا زمانی که دیگر نتواند شرایط را برآورده کند. پس از آن ، عملیات دوم حلقه خارجی را آغاز می کند. پس از شروع عملیات دوم ، حلقه داخلی تا زمانی که نتواند شرایط را برآورده کند ، اجرا می شود. چنین تکراری تا زمانی انجام می شود که همه شرایط برآورده نشود و از حلقه خارج شود.
در کد بالا ، بدن حلقه در حلقه خارجی در کل 5 بار عمل کرده است ، در حالی که بدن حلقه در حلقه داخلی 25 بار عمل کرده است. در عرض 25 بار ، با توجه به تفاوت مقدار i ، j ، می توانیم مختصات افقی و عمودی دایره را به طور جداگانه اطمینان دهیم. من بخشی از چاپ را جاسازی کرده ام ، می توانید خروجی داده ها را مشاهده کرده و در مورد تغییر آن فکر کنید. فقط با دو حلقه تو در تو ، می توانیم همه ترکیب داده های i ، j را تجربه کنیم.
نکات
حلقه for در لایه دوم معمولاً با Tab در ابتدا متراکم می شود. این می تواند ساختار کد را واضح تر کند. شما باید متغیرهای محلی را در دو لایه حلقه for با نام های مختلف نامگذاری کنید. در میان آن ، "i" ، "j" ، "k" بیشترین استفاده را دارد.
استفاده انعطاف پذیر از "i" ، "j"
دو نام متغیر "i" ، "j" نشان دهنده متغیرهای محلی دو لایه حلقه for است. مثال زیر درک شما را از "i" "j" عمیق تر می کند. با توجه به مقدار متفاوت "i" ، "j" ، می توانیم پارامترهایی را برای گروه بندی عناصر وارد کنیم.
مثال کد (5-13): [cceN_cpp theme = "dawn"] void setup () {
اندازه (700 ، 700) ؛
پس زمینه (0) ؛
noStroke ()؛
}
void draw () {
پس زمینه (0) ؛
پر کنید (250 ، 233 ، 77) ؛
برای (int i = 0 ؛ i <7؛ i ++) {
برای (int j = 0 ؛ j <7؛ j ++) {
pushMatrix ()؛
ترجمه (50 + i * 100 ، 50 + j * 100) ؛
// تنظیم 1
// شناور زاویه = sin (میلی ثانیه ()/1000.0) * PI/2 ؛
// تنظیم 2
// نسبت شناور = i/7.0 ؛
// شناور زاویه = sin (میلی ثانیه ()/1000.0 + نسبت * (PI/2)) * PI/2 ؛
// تنظیم 3
نسبت شناور = (i * 7 + j) /49.0 ؛
شناور زاویه = sin (میلی ثانیه ()/1000.0 + نسبت * (PI/2)) * PI/2 ؛
چرخش (زاویه) ؛
rectMode (CENTER) ؛
// رسم تصویر 1
راست (0 ، 0 ، 80 ، 80) ؛
// رسم تصویر 2
// rect (0 ، 0 ، 100 ، 20) ؛
// رسم تصویر 3
// rect (0 ، 0 ، نسبت * 50) ؛
popMatrix ()؛
}
}
} [/cceN_cpp]
توضیح کد
rectMode (CENTER) می تواند روش ترسیم مربع را تغییر دهد. دو پارامتر سابق راست برای تعریف مختصات گوشه بالای سمت چپ اسکائور استفاده می شود. پس از شروع این دستور ، از این دو پارامتر برای تنظیم مختصات برای نقطه مرکزی مربع استفاده می شود.از آنجا که در اینجا ما چرخش paterrn را از طریق rotate انجام می دهیم ، بنابراین باید از این روش برای ترسیم نقطه مرکزی به نقطه اصلی مختصات استفاده کنیم.
millis () زمان شروع برنامه تا کنون را بدست می آورد. واحد ms است. این مقدار بر سرعت تغییر مقدار خروجی sin تأثیر می گذارد. اگر میلی را مستقیم بنویسیم ، مقیاس تغییر خیلی بزرگ است. بنابراین ، ما باید آن را بر 1000.0 تقسیم کنیم.
در این بخش از کد ، از نماد نظر "//" برای پنهان کردن چندین تنظیمات استفاده می کنیم. می توانید جلوه ها را با شروع یا بستن تغییر دهید. به عنوان مثال ، اگر جملات پشت "تنظیم 3" را شروع کنیم ، باید از نماد نظر برای بستن بلوک های کد "تنظیم 1" و "تنظیم 2" استفاده کنیم. در مورد نمونه هایی از این ساختار برنامه مشابه با متغیرهای محلی مختلف ، می توانیم در این قالب بنویسیم. بنابراین لازم نیست چندین سند مهندسی را جداگانه ذخیره کنیم. ما می توانیم اغلب از این مهارت در حین تمرین و ایجاد استفاده کنیم و برخی از تنظیمات پارامترهای رضایت بخش را حفظ کنیم.
در میان آن ، تأثیر مقدار i ، j بر روی برنامه عمدتا با تغییر "تنظیم 1 (تنظیم 2) (تنظیم 3)" نشان داده می شود. می توانید نتایج خروجی را در زیر مقایسه کنید.
تصویر 1 را بکشید: تنظیم 1
تصویر 1 را بکشید: تنظیم 2
تصویر 1 را بکشید: تنظیم 3
تصویر 2 را بکشید: تنظیم 1
تصویر 2 را بکشید: تنظیم 2
تصویر 2 را بکشید: تنظیم 3
در تنظیم 1 ، از i و j برای تأثیر بر زاویه چرخش هر عنصر استفاده نکرده ایم. بنابراین می بینیم که حرکت هر عنصر یکسان است. در حالی که در تنظیمات 2 ، ما از مقدار i و از i و j در تنظیمات 3 استفاده کردیم. در نهایت آنها بر پارامترهای ورودی تابع sin از طریق نسبت تأثیر گذاشته اند. این امر باعث تغییر دوره ای زاویه شده است. به دلیل تأثیر واقعی تنظیم 2 و تنظیم 3 در گرافیک متحرک چندان آشکار نیست ، می توانیم آن را از تصویر زیر مشاهده کنیم.
رسم تصویر 2 (چپ: تنظیم 2 ؛ راست: تنظیم 3)
رسم تصویر 3 (چپ: تنظیم 2 ؛ راست: تنظیم 3)
در تصویر اول ، نسبت برای تأثیر بر زاویه چرخش مربع استفاده شده است. در حالی که تصویر دوم ، از آن برای کنترل مستقیم شعاع دایره استفاده می شود. می بینیم که از عبارت i value استفاده کرده است:
نسبت شناور = i/7.0 ؛
تغییر عنصر عمودی آن سازگار است. از آنجا که مختصات افقی برای کنترل تصویر فقط به مقدار i بستگی دارد ، بنابراین patterms با مختصات افقی یکسان یکسان خواهد بود. و مقدار نسبت ، زاویه چرخش و شعاع دایره نیز یکسان است.
در همان زمان ، از جمله i ، j استفاده می کنیم:
نسبت شناور = (i * 7 + j) /49.0 ؛
می تواند "گرادیان" را نشان دهد. در اینجا ، با روش ضرب یک عامل ، تأثیر سطرها و ستون ها را ترکیب کرده است. بنابراین هر عنصر متفاوت است.
مرحله 7: while Loop
یک برادر for for loop وجود دارد. این در حالی است که حلقه است. آنچه برای حلقه می تواند انجام دهد ، در حالی که حلقه نیز می تواند آن را انجام دهد. اما استفاده از فرکانس حلقه while در creativeCoding به اندازه حلقه زیاد نیست.
مثال کد (5-14): [cceN_cpp theme = "dawn"] void setup () {
int a = 0؛
در حالی که (a <10) {
println (a) ؛
a ++ ؛
}
} [/cceN_cpp]
درک ساختار گرامری while آسان تر از آن است که درک شود. ما می توانیم متغیرهایی را قبل از statement ایجاد کنیم. سپس یک عبارت را داخل پرانتز مربع پر کنید. وقتی راضی شد ، سپس جملات را در قسمت حلقه به کار ببرید. در نهایت ما یک عبارت را در بدنه حلقه قرار می دهیم تا متغیرها را به روز کند ، سپس حلقه به پایان برسد. در مورد زمان حلقه مطمئن ، ما اغلب برای حلقه استفاده می کنیم. در مورد مقدار متغیر نامحدود ، توصیه می کنیم از حلقه while استفاده کنید.
فکر:
سعی کنید از انواع عناصر اساسی برای جایگزینی عناصر طراحی درون حلقه برای ایجاد برس های مختلف استفاده کنید.
با عملکرد مثلثاتی ذکر شده در فصل گذشته ترکیب کنید ، سعی کنید قلم مو "نقاط پراکندگی" را به قلموی شکل گرد تبدیل کنید.
سعی کنید ماتریس نقطه ای دو بعدی را فقط با حلقه for بسازید.
همانطور که در این دوره ، شما هر دانش جدیدی را که یاد می گیرید پیدا خواهید کرد ، امکان بازی فوراً بسیار افزایش می یابد. برنامه جعبه پاندورا است. هر آنچه را که می توانید تصور کنید ، می تواند برای شما انجام دهد. بنابراین هیچ دلیلی وجود ندارد که ما این زبان را که می تواند با رایانه ارتباط برقرار کند ، یاد نگیریم. در فصل بعدی ما ، یک دستور کنترل فرآیند دیگر را به شما معرفی می کنیم. این می تواند جریان فرآیند را کنترل کرده و نتایج پیچیده تر و قابل تغییر ایجاد کند. با دستور if ، می توانید بازی های ماجراجویی متنی خود را با سهولت بسازید! این مقاله از طراح Wenzy آمده است. خواندن های نسبی: راهنمای برنامه نویسی جالب برای طراح-پردازش لمس اولیه راهنمای برنامه نویسی جالب برای طراح-ایجاد اولین برنامه پردازشی خود راهنمای برنامه نویسی جالب برای طراح - تصویر خود را اجرا کنید (قسمت اول) راهنمای برنامه نویسی جالب برای طراح - تصویر خود را اجرا کنید (قسمت دوم)
مرحله 8: منبع
این مقاله از: https://www.elecfreaks.com/11037.html است
اگر س questionsالی دارید ، می توانید با : [email protected] تماس بگیرید.
توصیه شده:
راهنمای برنامه نویسی جالب برای طراح-تصویر خود را اجرا کنید (قسمت دوم): 8 مرحله
راهنمای برنامه نویسی جالب برای طراح-تصویر خود را اجرا کنید (قسمت دوم): برای اکثر شما ریاضی بی فایده به نظر می رسد. متداول ترین مورد در زندگی روزمره ما فقط جمع ، تفریق ، ضرب و تقسیم است. با این حال ، اگر بتوانید با برنامه ایجاد کنید ، کاملاً متفاوت است. هرچه بیشتر بدانید ، نتیجه شگفت انگیزتری خواهید داشت
برنامه افزودنی ساده در زبان برنامه نویسی شکسپیر: 18 مرحله
برنامه افزودنی ساده در زبان برنامه نویسی شکسپیر: زبان برنامه نویسی شکسپیر (SPL) نمونه ای از زبان برنامه نویسی باطنی است ، که شاید یادگیری آن جالب و استفاده از آن جالب باشد ، اما در برنامه های کاربردی واقعی بسیار مفید نیست. SPL زبانی است که در آن کد منبع r
راهنمای برنامه نویسی پردازش جالب برای طراح-بارگذاری رسانه و رویداد: 13 مرحله
راهنمای برنامه نویسی پردازش جالب برای طراح-بارگذاری رسانه و رویداد: پردازش را می توان تعداد زیادی داده خارجی بارگذاری کرد که در بین آنها سه نوع بسیار مورد استفاده قرار می گیرد. آنها بصورت جداگانه تصویر ، صدا و تصویر هستند. در این فصل ، ما قصد داریم در مورد نحوه بارگذاری صوتی و تصویری به طور مفصل ، همراه با رویداد صحبت کنیم
Pic 16F676 ICSP سوکت برنامه نویسی برای برنامه نویس PICkit 2: 6 مرحله
عکس 16F676 ICSP سوکت برنامه نویسی برای برنامه نویس PICkit 2: من سعی می کنم این ماژول موتور DC دوگانه را برای پروژه ربات خود بسازم و فضا برای قرار دادن هدر پین ICSP روی PCB نداشتم. بنابراین من به سرعت این طرح را مسخره کردم
راهنمای برنامه نویسی جالب برای طراح-تصویر خود را اجرا کنید (قسمت اول): 16 مرحله
راهنمای برنامه نویسی جالب برای طراح-تصویر خود را اجرا کنید (قسمت اول): اجرا کنید! اجرا کن! اجرا کنید! برنامه نویسی چندان دشوار نیست. نکته کلیدی این است که ریتم خود را پیدا کرده و آن را یکی یکی انجام دهید. قبل از خواندن این فصل ، امیدوارم قبلاً با روش ترسیم عملکرد اصلی آشنا شده باشید ، یا دچار سرگیجه و گیجی می شوید