Агуулгын хүснэгт:

Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл: 8 алхам
Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл: 8 алхам

Видео: Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл: 8 алхам

Видео: Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл: 8 алхам
Видео: The Mindful Millionaire Timeless Lessons on Wealth Greed and Happiness in the Psychology of Money 2024, Долдугаар сарын
Anonim
Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл
Дизайнерын хувьд сонирхолтой програмчлалын удирдамж-Хөтөлбөрийн үйл явцын хяналт- Цогц мэдэгдэл

Хөтөлбөрийн үйл явцын хяналт- Давталтын мэдэгдэл

Энэ бүлгээс та мэдлэгийн чухал, хүчирхэг цэг болох Loop мэдэгдэлтэй холбогдох болно.

Энэ бүлгийг уншихаасаа өмнө, хэрэв та програмд 10 000 тойрог зурахыг хүсч байвал зөвхөн аймшигтай аргаар хийж болно. Энэ бол 10 000 мөр эллипс код бичих явдал юм. Үр ашгийг бүх талаар сайжруулахыг хүсч буй залхуу код зохион бүтээгчид үүнийг хийхийг зөвшөөрөхгүй нь лавтай. Тиймээс loop мэдэгдэл үүснэ. Энэхүү мэдэгдлийн тусламжтайгаар та компьютерийн автоматжуулалтын хүчийг зөн совинтойгоор мэдэрч чадна.

Алхам 1: Loop -ийн хувьд

Маш олон давталтын мэдэгдэл байдаг бөгөөд тэдгээрийн дунд хамгийн өргөн хэрэглэгддэг нь For Loop юм. Функцийн сугалаа нь эргэлтэнд тасралтгүй ажилладаг гэдгийг бид бүгд мэднэ. Эхний өгүүлбэрийг эхнээс нь эхэлж, энэ нь дээрээс доошоо сүүлчийн өгүүлбэр хүртэл хэрэгжих болно. Үйл ажиллагаа дууссаны дараа эхний өгүүлбэрээс дахин эхлэх болно. Мэдэгдлийн хувьд функц зурахтай бага зэрэг төстэй байдаг. Мэдэгдлийн доторх кодыг дахин дахин ажиллуулж болно.

Энд түүний дүрмийн бүтэц байна:

For (илэрхийлэл 1; илэрхийлэл 2; илэрхийлэл 3) {

Биеийн гогцоо

}

Мэдээжийн хэрэг, давталтын бие дэх өгүүлбэрүүд нь бидний давтан хэрэгжихийг хүсч байсан зүйл юм. 1 -р илэрхийллийг давталтын хувьсагчийг эхлүүлэх, анхны утгыг өгөхөд ашигладаг. Илэрхийлэл 2 нь давталтын нөхцөлд зориулагдсан болно. Илэрхийлэл 3 нь давталтын хувьсагчийн утгыг шинэчлэх болно.

Давталтын хувьсагч гэж юу вэ? Энэ нь үнэндээ орон нутгийн хувьсагчтай тэнцүү юм. Бүрэн бичсэнийг авч үзье.

for (int i = 0; i <10; i ++) {

Биеийн гогцоо

}

Циклийн функцийг хэрэгжүүлэхийн тулд мэдэгдэл нь гогцоог таслах үед хэрэглэгдэх локал хувьсагч дээр тулгуурладаг. Дээрх жишээн дэх локал хувьсагч нь i. 1 -р илэрхийлэл нь орон нутгийн хувьсагчийг эхлүүлж дууссан. Хожим нь давталт нэг удаа ажиллах бүрт энэ хувьсагч шинэчлэгдэх ёстой. Дээрх жишээнүүдийн дунд 3 -р илэрхийлэл дэх i ++ нь шинэчлэлтийн функцийг хэрэгжүүлэхэд ашиглагддаг. Түүгээр дамжуулан хувьсагч шинэчлэгдэх бүрт 1 -ээр нэмэгдэх болно. Эцэст нь хэлхээний доторх код нь тодорхойгүй хугацаанд цикл хийх боломжгүй, харин бусад мэдэгдлийг гүйцэтгэх боломжгүй юм. Тиймээс бидэнд эцсийн нөхцөл хэрэгтэй байна. Экспресс 2 нь зөвхөн үүнд зориулагдсан болно. Энд би програмыг 10 -аас бага эсэхийг шүүх болно. Хэрэв тийм бол үйл ажиллагаагаа үргэлжлүүлээрэй. Хэрэв тийм биш бол давталтаас үсрээрэй.

Тиймээс, for мэдэгдлийн ажиллагааны дараалал яг ийм байна.

Илэрхийлэл 1 (Орон нутгийн хувьсагчийг эхлүүлэх)

Илэрхийлэл 2 (Сэтгэл хангалуун, дараа нь үргэлжлүүлэн ажиллана)

Биеийн гогцоо (Эхний эргэлт)

Илэрхийлэл 3 (Шинэчлэх)

Илэрхийлэл 2 (Сэтгэл хангалуун, дараа нь үргэлжлүүлэн ажиллана)

Гогцоон бие (Хоёр дахь тойрог)

Илэрхийлэл 3 (Шинэчлэх)

Илэрхийлэл 2 (Сэтгэл хангалуун, дараа нь үргэлжлүүлэн ажиллана)

Биеийн гогцоо (Гурав дахь эргэлт)…

Илэрхийлэл 3 (Шинэчлэх)

Илэрхийлэл 2 (сэтгэл хангалуун бус, дараа нь давталтаас үсрээрэй)

Та энэхүү гүйцэтгэх дарааллыг толгой дээрээ хэд хэдэн удаа дуурайж болно. Гэхдээ кодыг гараараа нэг удаа бичихгүйгээр үнэхээр ойлгох боломжгүй юм. Хачирхалтай ойлголтыг олж мэдэхийг хүсч байвал бид println мэдэгдэл ашиглан консол дээрх утгыг хэвлэх боломжтой болно.

Кодын жишээ (5-1): void setup () {

for (int i = 0; i <10; i ++) {

println ("ажиллуулах");

}

}

Та консол дээрх ажиллуулах гаралтын тоог тоолж болно. Энд яг 10 байна. Энэ нь давталтын биен дэх кодыг хэдэн удаа гүйцэтгэснийг хэлж өгнө. Гэсэн хэдий ч мөчлөгт яг ямар өөрчлөлт гарсан болохыг бид одоог хүртэл олж чадаагүй байна. Тиймээс бид "i" хувьсагч руу дүрийг өөрчлөхийг оролдож, юу болохыг харах боломжтой болно.

Кодын жишээ (5-2): void setup () {

for (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 -ээс эхэлдэг.

Дээрх жишээн дээр хэрэв бид i -г 0 -ээс хэтрүүлсэн гэж бичвэл pogram сүйрэх болно. Хувьсагч тогтмол өсч байгаа тул энэ нөхцлийг хэзээ ч хангаж чадахгүй. Энэ нь програмыг эцэс төгсгөлгүй давталтад оруулахын тулд үүнийг хэзээ ч зогсоох боломжгүй юм.

For мэдэгдлийн орон нутгийн хувьсагчид хуванцар төрлийг зарлахаас гадна хөвөгч цэгийн төрлүүдэд хувьсагчийг зарлах боломжтой. Жишээлбэл, үүнийг (float i = 0; i <10; i + = 0.02) гэж бичиж болно.

Алхам 2: Математикийн асуудлыг шийдвэрлэхийн тулд Loop -ийг ашиглана уу

Математикч Гауссын бага насны түүхийг та одоо хүртэл санаж байна уу? Тэр үед Гуасс 10 настай байсан. Багш нь ангид даалгавар өгөхийг хүссэн бөгөөд асуулт нь ийм байв

1+2+3+4……+97+98+99+100=?

Хэрэв та гараараа тооцоолох юм бол танд маш их цаг хугацаа шаардагдах болно. Гэхдээ Guass арифметик дарааллыг нэгтгэх аргыг аль хэдийн олж мэдсэн бололтой. Асуулт өгсний дараа л тэр хариулахдаа багшдаа маш их гайхсан хариултыг хялбархан хэлэв.

Арифметик дарааллын нийлбэр гэж юу болохыг бид одоо хүртэл санахгүй байгаа боловч хариултыг энгийн бөгөөд хүчирхийллийн аргаар авах боломжтой. Мөн энэ нь гогцоонд зориулагдсан болно. Компьютер тоолох жижигхэн бялуу тул бид энэ асуултыг компьютерээр танигдахуйц хэлээр тайлбарлах ёстой, тэгвэл бид хариултаа амархан авах боломжтой болно.

Кодын жишээ (5-3):

хүчингүй тохиргоо () {

int хариулт = 0;

for (int i = 1; i <= 100; i ++) {

хариулт += i;

}

println (хариулт);

}

Таны авсан үр дүн Guass -ийн өгсөн хариулттай ижил байна гэж би бодож байна: энэ бол 5050!

Зөвлөмж: for loop дахь орон нутгийн хувьсагчдын нэрийг хувьсагчийн нэрлэх дүрмийг дагаж мөрдвөл хүссэнээрээ өөрчилж болно. Та үүнийг бичиж болно (int k = 1; k <= 100; k ++). Хэрэв специфик нөхцөл үүсээгүй бол i нь хувьсагчийн нэр болно.

Алхам 3: Гогцоо зурах

Уйтгартай мэт санагдах ор дэрний цагаан хэрэглэлийг хийсний дараа эцэст нь бид илүү сонирхолтой хэсэгт орж болно. Энэ нь зураг зурахдаа давталтыг ашиглах явдал юм. Эдгээр уйтгартай математик тооцооллыг бид одоо хойш тавьж болно. Загвар зохион бүтээгчид бид графикт илүү мэдрэмтгий байдаг.

Тойрог массив зурахын тулд Loop ашиглах

Дахин давтагдах элементүүдийн бүлгийг төлөөлөхийн тулд loop ашиглахыг хүсч байгаа бол бид эдгээр элементүүдийн тоон хамаарлыг урьдчилан шалгах ёстой бөгөөд дараа нь давталтын ажлыг хийхийн оронд үүнийг хялбархан хэрэгжүүлэхийн тулд давталтыг ашиглаж болно. Хэрэв бид хэвтээ чиглэлд тэнцүү тархсан тойрог зурахыг хүсч байна гэж бодъё. Түүний виртуал координат өөрчлөгдөөгүй байхад хэвтээ координат нь өөрчлөгдсөн байна. Зүүнээс баруун тийш хэвтээ координат байнга нэмэгдэж, нэмэгдэж буй зай ижил байна. Энэ үед бид тойрог бүрийн хэвтээ координатыг авахын тулд i in for loop ашиглаж болно.

Кодын жишээ (5-4): void setup () {

хэмжээ (700, 700);

дэвсгэр (83, 51, 194);

цус харвалтгүй ();

}

хүчингүй сугалаа () {

for (int i = 0; i <7; i ++) {

эллипс (50.0 + i * 100.0, өндөр/2.0, 80.0, 80.0);

}

}

50 гэдэг нь зүүн талын эхний тойргийн эхлэх байрлалыг илэрхийлнэ. I * 100 дахь 100 нь нэмэгдэж буй зайг илэрхийлнэ.

Алхам 4: Санамсаргүй дугуй цэг зурахын тулд Loop -ийг ашиглана уу

Дээрх график байрлалыг урьдчилан таамаглах боломжтой. Энэ нь олон хүмүүсийн сонирхлыг бууруулах болно. Бид өмнөх бүлэгт дурдсан функцийг санамсаргүй байдлаар ашиглаж, үүнийг зурах функцэд бичихийг оролдож болно.

Кодын жишээ (5-5):

хүчингүй тохиргоо () {

хэмжээ (700, 700);

дэвсгэр (0);

цус харвалтгүй ();

}

хүчингүй сугалаа () {

дэвсгэр (0);

for (int i = 0; i <10; i ++) {

float randomWidth = санамсаргүй (60.0);

эллипс (санамсаргүй (өргөн), санамсаргүй (өндөр), randomWidth, randomWidth);

}

}

Энд тойргийн байрлал тасралтгүй анивчдаг шалтгаан нь санамсаргүй функц нэг удаа ажиллахад үр дүн нь санамсаргүй байдлаар гардагтай холбоотой юм. Функцийн сугалаа нь секундэд 60 фрэйм ажиллуулахаар анхдагч байдаг тул нэг секундэд зурсан 10 тойрог бүр 60 удаа байрлалаа өөрчлөх болно. Энэхүү хурдан флаш нь зургийг 10 гаруй тойрогтой мэт харагдуулдаг. Хөтөлбөрийн энгийн утгыг өөрчлөх нь танд огт өөр эффект авчрах болно. Бид терминалын нөхцлийг өөрчлөх замаар давталтын хугацааг өөрчилж болно. Доорх зурган дээрх терминалын нөхцөл нь i <100 байна

  1. Терминалын нөхцөл i <1000 байх үеийн үр нөлөөг энд харуулав.
  2. RandomSeed
  3. Хэрэв би тойргийн байрлалыг санамсаргүй байдлаар үүсгэхийг хүсэхгүй байгаа бол би юу хийж чадах вэ? Нэг арга бол тойрог тус бүрт бие даасан хувьсагчдыг үүсгэх, хадгалах, эдгээр хувьсагчдыг тохиргоонд оруулах явдал юм. Эдгээр хувьсагчдад санамсаргүй утга өг. Тиймээс, draw дотор зурах функцийг ашиглахдаа хувьсагчдад хадгалагдсан утга юм. Энэ нь хэзээ ч өөрчлөгдөхгүй. 10 тойрог зурахын тулд бид энэ аргыг ашиглаж болно. Гэхдээ хэрэв бид 1000 тойрог эсвэл 10 000 тойрог зурахыг хүсч байвал яах вэ? Хэрэв бид эдгээр хувьсагчдыг бий болгохын тулд энэхүү уламжлалт аргыг ашиглавал нэлээд төвөгтэй байх болно. Бид хувьсах бүтцийн шинэ аргыг сурах шаардлагагүй. Энэ зорилгодоо хүрэхэд бидэнд туслах уян хатан аргыг энд оруулав. Энэ бол randomSeed ашиглах явдал юм. Одоо хэрэглэсний дараа түүний үр нөлөөг авч үзье. Кодын жишээ (5-6): [cceN_cpp theme = "үүр цайх"] void setup () {size (700, 700); дэвсгэр (0); цус харвалт ();}
  4. хүчингүй сугалаа () {

    дэвсгэр (0);

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth = санамсаргүй (20.0, 60.0);

    эллипс (санамсаргүй (өргөн), санамсаргүй (өндөр), randomWidth, randomWidth);

    }

    } [/cceN_cpp]

    Өмнөх кодтой харьцуулахад тойргийн радиусын хүрээг зөвхөн ofSeedRandom гэсэн өгүүлбэрээр 10 -аас 30 болгож өөрчлөхөөс өөр ямар ч өөрчлөлт ороогүй болно. Энэ өгүүлбэрийг нэмсний дараа график нь статик болж хувирсан юм шиг байна.

    Дуудлагын формат:

    randomSeed (a);

    Энэ форматын дунд a -ийн тохиргоо нь үр юм. Та үүнд бүхэл тоог бөглөх ёстой (P5 дээр хөвөх цэгийн утгыг бичээрэй, энэ нь алдаагүй, харин бүхэл тоо гэж үзэх болно). RandomSeed -ийн үүрэг бол үрийг санамсаргүй утгаар тохируулах явдал юм. Дараа нь өөр өөр үрийн дагуу өөр өөр санамсаргүй массив үүсгэх болно. Үүний дараа бид функцийг санамсаргүй байдлаар дууддаг бөгөөд ингэснээр өгөөжийн үр дүн тодорхой болно. Энд тодорхой бол үр дүн нь тодорхой утга биш харин үүсгэсэн массив юм. Энэ нь буцах үр дүн нь дуудсан цаг хугацаатай харьцуулахад тодорхой байна гэсэн үг юм.

    Кодын жишээ (5-7): [cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

    randomSeed (0);

    for (int i = 0; i <5; i ++) {

    println (санамсаргүй (10));

    }

    } [/cceN_cpp]

    Одоо бид туршилт хийхийн тулд println -ийг ашиглаж байна. RandomSeed -ийг ашигласны дараа та програмыг хааж, програмыг дахин эхлүүлэх бүрт ижил үр дүнгийн мөр рүү буцах болно. Утга нь дарааллаар нэг нэгээр нь харгалзах болно. Хэрэв та үүнийг устгавал энэ нь өөр утга руу буцах болно. Яагаад ийм тохиргоо хийсэн юм бэ? Энэ нь програм дахь санамсаргүй утга нь хуурамч санамсаргүй байдлаас үүдэлтэй юм. Үр дүн нь санамсаргүй мэт боловч үнэндээ үүнийг тогтмол, давтагдах тооцооллын аргаар гаргадаг. Энэ нь randomSeed -ийн анхны утгыг тодорхойлохтой тэнцүү бөгөөд дараа нь энэ үрийн дагуу дараах үр дүнг тооцоолно. Гэсэн хэдий ч хэрэв бид үрийг зааж өгөөгүй бол хөтөлбөр нь системийн одоогийн цагийг ашиглан үр үйлдвэрлэх болно. Тиймээс үйл ажиллагаа бүрийн үр дүн өөр өөр байдаг. Доорх жишээ нь randomSeed -ийг илүү сайн ойлгоход тусална.

    Жишээ код (5-8): [cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

    хэмжээ (700, 700);

    дэвсгэр (0);

    цус харвалтгүй ();

    }

    хүчингүй сугалаа () {

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth01 = санамсаргүй (10, 60);

    эллипс (санамсаргүй (өргөн), санамсаргүй (өндөр), randomWidth01, randomWidth01);

    println (randomWidth01);

    }

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth02 = санамсаргүй (10, 60);

    эллипс (санамсаргүй (өргөн), санамсаргүй (өндөр), randomWidth02, randomWidth02);

    println (randomWidth02);

    }

    } [/cceN_cpp]

    Хоёр дахь randomSeed (1) -ийг randomSeed (0) болгож, эцсийн үр дүнг харьцуулж үзээрэй.

    Зөвлөмж: P5 дээр бид сугалааны төгсгөлд noLoop функцийг дуудах ёстой бөгөөд ингэснээр бид ижил эффект авах боломжтой болно. Үүний үүрэг бол програмыг зогсоох явдал юм. Энэ нь мөн чанараараа дээр дурдсан ажлын зарчмуудаас огт өөр юм.

Алхам 5: Мөр зурахдаа Loop дээр ашиглана уу

RandomSeed -ийн хэрэглээг эзэмшсэний дараа бид зургийн функцийг өөрчлөхийг оролдож болно. Жишээлбэл, тойрог зургийн зураасыг зурах хэлбэрээр өөрчлөх. Зөвхөн шугамын төгсгөл хүртэл зарим өөрчлөлт хийх дүрмийг боловсруулж чадвал бид өвөрмөц хэв маягийг бий болгохын тулд маш олон мөрийг ашиглаж болно.

Кодын жишээ (5-9):

[cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

хэмжээ (700, 700);

дэвсгэр (0);

}

хүчингүй сугалаа () {

randomSeed (0);

for (int i = 0; i <2000; i ++) {

float x1 = өргөн/2.0;

float x2 = санамсаргүй (50.0, 650.0);

цус харвалт (255, 20);

шугам (x1, 50, x2, 650);

}

} [/cceN_cpp]

Энгийн сойз үүсгэх

Дахин давталт руу буцах. Дээрх жишээнүүд нь интерактив биш юм. Хэрэв бид үр дүнг илүү сонирхолтой болгохыг хүсч байвал mouseX болон mouseY -ийг коддоо нэгтгэхийг мартаж болохгүй.

Кодын жишээ (5-10):

[cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

хэмжээ (700, 700);

дэвсгэр (255);

цус харвалтгүй ();

}

хүчингүй сугалаа () {

for (int i = 0; i <1000; i ++) {

бөглөх (0, 30);

float x = mouseX + санамсаргүй (-50, 50);

float y = mouseY + санамсаргүй (-50, 50);

эллипс (x, y, 2, 2);

}

} [/cceN_cpp]

"Тархалтын цэгүүд" бийр бий болно. Мини дугуй хэлбэртэй цэг бүр хулганы байрлал дээр суурилдаг тул зүүн, баруун, дээш, доош гэсэн дөрвөн чиглэлээс хязгаарлагдмал чиглэлийг хөдөлгөж чаддаг. Тиймээс сойзны эцсийн хэлбэр нь дөрвөлжин хэлбэртэй төстэй юм.

Кодын жишээ (5-11):

[cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

хэмжээ (700, 700);

дэвсгэр (255);

цус харвалтгүй ();

}

хүчингүй сугалаа () {

for (int i = 0; i <1000; i ++) {

хөвөх харьцаа = mouseX/(хөвөх) өргөн;

float x = mouseX + санамсаргүй (-50, 50);

float 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 = "үүр цайх"] хүчингүй тохиргоо () {

хэмжээ (700, 700, P2D);

дэвсгэр (202, 240, 107);

}

хүчингүй сугалаа () {

бөглөх (0);

for (int i = 0; i <5; i ++) {

for (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 өгөгдлийн бүх хослолыг мэдэрч чадна.

Зөвлөмж

Хоёр дахь давхарга дахь давталтын хувьд ихэвчлэн эхэнд нь Tab -ээр нягтруулдаг. Энэ нь кодын бүтцийг илүү тодорхой болгож чадна. Та өөр өөр нэртэй давталтын хоёр давхаргад орон нутгийн хувьсагчдыг нэрлэх ёстой. Үүний дотор "i", "j", "k" нь хамгийн их хэрэглэгддэг.

Уян хатан хэрэглээ "i", "j"

"I", "j" гэсэн хоёр хувьсагчийн нэр нь for давталтын хоёр давхаргын локал хувьсагчдыг илэрхийлнэ. Доорх жишээ нь "i" "j" гэсэн ойлголтыг гүнзгийрүүлэх болно. "I", "j" гэсэн өөр өөр утгын дагуу бид элементүүдийг бүлэглэх параметрүүдийг оруулж болно.

Кодын жишээ (5-13): [cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

хэмжээ (700, 700);

дэвсгэр (0);

цус харвалтгүй ();

}

хүчингүй сугалаа () {

дэвсгэр (0);

дүүргэх (250, 233, 77);

for (int i = 0; i <7; i ++) {

for (int j = 0; j <7; j ++) {

pushMatrix ();

орчуулах (50 + i * 100, 50 + j * 100);

// Тохиргоо 1

// хөвөх өнцөг = sin (millis ()/1000.0) * PI/2;

// Тохиргоо 2

// хөвөх харьцаа = i/7.0;

// хөвөх өнцөг = sin (millis ()/1000.0 + харьцаа * (PI/2)) * PI/2;

// Тохиргоо 3

хөвөх харьцаа = (i * 7 + j) /49.0;

хөвөх өнцөг = sin (millis ()/1000.0 + харьцаа * (PI/2)) * PI/2;

эргүүлэх (өнцөг);

rectMode (ТӨВ);

// Зураг зурах 1

шулуун (0, 0, 80, 80);

// Зураг зурах 2

// шулуун (0, 0, 100, 20);

// Зураг зурах 3

// шулуун (0, 0, харьцаа * 50);

popMatrix ();

}

}

} [/cceN_cpp]

Кодын тайлбар

rectMode (CENTER) нь дөрвөлжин зурах аргыг өөрчлөх боломжтой. Шулууны зүүн дээд булангийн координатыг тодорхойлоход оригинал хуучин хоёр параметрийг ашигладаг. Бид энэ тушаалыг эхлүүлсний дараа эдгээр хоёр параметрийг квадрат төвийн цэгийн координатыг тохируулахад ашиглана. Учир нь энд бид эргүүлэх замаар эцэг эхийн эргэлтийг ажиллуулдаг тул энэ аргыг ашиглан төвийн цэгийг координатын анхны цэг рүү зурах хэрэгтэй.

millis () нь програмын эхлэлээс өнөөг хүртэлх хугацааг олж авдаг бөгөөд нэгж нь эмэгтэй бөгөөд энэ утга нь нүглийн гаралтын утгын хурдыг өөрчлөхөд нөлөөлдөг. Хэрэв бид миллисийг шууд бичих юм бол өөрчлөгдөж буй хэмжээс хэт том байна. Тиймээс бид үүнийг 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 -ийн утгыг, 3 -р тохиргоонд i ба j -ийг хоёуланг нь ашигласан болно. Энэ нь өнцгийн үечилсэн өөрчлөлтийг өөрчилсөн. Хөдөлгөөнт график дээр 2 ба 3 -р тохируулгын бодит нөлөө тийм ч тод харагдахгүй байгаа тул бид үүнийг дараах дэлгэцийн агшин дээрээс ажиглаж болно.

Зураг 2 зур (Зүүн: Тохиргоо 2; Баруун: Тохиргоо 3)

Зураг 3 зур (Зүүн: Тохиргоо 2; Баруун: Тохиргоо 3)

Эхний зурган дээр квадрат эргүүлэх өнцөгт нөлөөлөх харьцааг ашигласан болно. Хоёрдахь зургийг тойргийн радиусыг шууд удирдах зориулалттай. Энэ нь i value өгүүлбэрийг ашигласан болохыг бид харж байна.

хөвөх харьцаа = i/7.0;

Түүний оройн элементийн өөрчлөлт тогтвортой байна. Зургийг хянахын тулд хэвтээ координат нь зөвхөн i -ийн утгаас хамаардаг тул ижил хэвтээ координаттай паттермууд ижил байх болно. Мөн харьцаа, эргэх өнцөг, тойргийн радиусын утга ижил байна.

Үүний зэрэгцээ бид i, j өгүүлбэрийг ашигладаг.

хөвөх харьцаа = (i * 7 + j) /49.0;

Энэ нь "градиент" -ийг тодорхойлж чаддаг. Энд коэффициентийг үржүүлэх аргаар мөр баганын нөлөөг нэгтгэсэн болно. Тиймээс элемент бүр өөр өөр байдаг.

Алхам 7: Loop байхад

For loop -ийн ах байдаг. Энэ бол loop. Loop юу хийж чадах вэ, харин loop үүнийг бас хийж чадна. Гэхдээ creativeCoding дахь while давталтын давтамжийг ашиглах нь давталтынхаас өндөр биш юм.

Кодын жишээ (5-14): [cceN_cpp theme = "үүр цайх"] хүчингүй тохиргоо () {

int a = 0;

байхад (a <10) {

println (a);

a ++;

}

} [/cceN_cpp]

While дүрмийн бүтцийг ойлгохоос илүү хялбар байдаг. While мэдэгдлийн өмнө бид хувьсагч үүсгэж болно. Дараа нь дөрвөлжин хаалт дотор илэрхийлэл бөглөнө үү. Энэ нь сэтгэл хангалуун байвал өгүүлбэрийг гогцоо биеийн дотор ажиллуул. Эцэст нь бид хувьсагчдыг шинэчлэхийн тулд давталтын биед илэрхийлэл тавьж, дараа нь гогцоо дуусах болно. Баталгаатай давталтын хугацааны хувьд бид ихэвчлэн давталтад ашигладаг. Тодорхойгүй хувьсагчийн утгын хувьд while давталт ашиглахыг зөвлөж байна.

Бодоорой:

Төрөл бүрийн сойз үүсгэхийн тулд гогцоонд зургийн элементүүдийг орлуулахын тулд бүх төрлийн үндсэн элементүүдийг ашиглахыг хичээ.

Сүүлийн бүлэгт дурдсан тригонометрийн функцтэй хослуулан "сарнисан цэгүүд" сойзоо дугуй хэлбэртэй сойз болгон өөрчлөхийг хичээ.

Зөвхөн for давталттай хоёр хэмжээст цэг матриц хийхийг хичээ.

Дараагийн бүлгийн урьдчилж харах Энэ курсын нэгэн адил та сурч мэдсэн шинэ мэдлэгээ олж авах бөгөөд тоглох боломж нь маш их нэмэгдэх болно. Хөтөлбөр бол пандора хайрцаг юм. Таны төсөөлж байсан бүхэн таны төлөө үүнийг хийж чадна. Тиймээс бид компьютертэй харилцах чадвартай энэ хэлийг сурахгүй байх шалтгаан байхгүй. Дараагийн бүлэгтээ бид танд процессын хяналтын өөр нэг мэдэгдлийг танилцуулах болно. Энэ нь процессын явцыг хянаж, илүү төвөгтэй, өөрчлөгдөх үр дүнг бий болгож чадна. If мэдэгдлээр та өөрийн текстэн адал явдалт тоглоомыг хялбархан бүтээж чадна! Энэхүү нийтлэлийг дизайнер Wenzy-ээс авсан болно. Холбоотой уншлага: Дизайнерын сонирхолтой програмчлалын зааварчилгаа-Анхны мэдрэгчийг боловсруулах Дизайнерын сонирхолтой програмчлалын удирдамж-Анхны боловсруулалтын програмаа бүтээх Дизайнерын сонирхолтой програмчлалын удирдамж. Дизайнерын хувьд програмчлалын сонирхолтой зааварчилгаа авах (Зураг нэгдүгээр хэсэг) - Зургаа ажиллуулах (Хоёрдугаар хэсэг)

Алхам 8: Эх сурвалж

Энэ нийтлэлийг:

Хэрэв танд ямар нэгэн асуулт байвал та [email protected] хаягаар холбоо барьж болно.

Зөвлөмж болгож буй: