Jeffrey Cross
Jeffrey Cross

Codebox: Ustvarite fraktalni menagerie

Po besedah ​​Wikipedije je fraktal "groba ali razdrobljena geometrijska oblika, ki jo lahko razdelimo na dele, od katerih je vsaka (vsaj približno) kopija celote v zmanjšani velikosti." uporabljajo zelo preproste procese, da ustvarijo resnično zapletene, naravne predmete, kot so rastline, oblaki, plameni itd. Ta kodeks vam bo pokazal, kako ustvarite fraktalni menagerie za ogled nekaj različnih stilov fraktalov, na primer:

Na poti bomo nadaljevali s širjenjem konceptov objektno usmerjenega programiranja (OOP), ki so predstavljeni v poglavju 9 o začetku obdelave, kot tudi pokazali, kako uporabiti veliko knjižnico controlP5 za ustvarjanje znanih GUI kontrol, ki se uporabljajo v drugih jezikih. .

IFS Fraktali

Iterated Function System, ali IFS, je ena najpreprostejših tehnik za ustvarjanje naravnih frakcij. IFS sestavlja peščica transformacij (več o tem v sekundi), ki opisujejo, kako spremeniti eno točko v drugo. Barnsley Fern, ki je videti kot črna sleparica (nekakšna praproti), je klasičen primer IFS fraktala, vendar obstaja veliko sort. Larry Riddle ima lepo razčlenitev drugih na svoji strani IFS sistemov.

Tehnika deluje tako. Začenši iz ene točke, običajno (0,0), naključno uporabite eno od transformacij, ki sestavljajo IFS sistem. Potem, ko imate novo, preoblikovano točko, jo narišete na zaslonu, kar v obdelavi naredimo z nastavi () ukaz. Nato ponovite postopek znova od točke, ki ste jo pravkar izračunali.

Po nekaj sto ponovitvah boste začeli videti sablasni obris praproti. Po 100.000 ponovitvah boste videli podrobno sliko, ki izgleda skoraj popolnoma kot naravni objekt. Naslednja slika prikazuje sistem IFS za praproti Barnsley, kakor tudi sliko, ki nastane, ko postopek vedno znova uporabljate.

Razpakirajte podrobnosti malo več. Transformacija je formula, ki… dobro preoblikuje eno točko v drugo točko. Tako kot pretvorbe prevajanja, vrtenja in lestvice, opisane na strani 104 za začetek obdelave, transformacije v sistemu IFS preslikajo točko na novo lokacijo z uporabo transformacijske matrike, ki je skrajšani način za predstavitev niza formul. .

Tabela, ki definira sistem IFS, zagotavlja vrednosti, ki se uporabljajo v matricah. Stolpci a, b, d, d, e in f predstavljajo različne elemente matrike. (V stolpcu p bom govoril v sekundi.) Naslednja slika prikazuje, kako prevesti vrstico v sistemu IFS v matriko:

Na primer, tukaj je tretja matrika transformacije za Barnsley Fern, ki je bila prikazana prej:

Končni stolpec v matrici IFS, p, predstavlja frekvenco, s katero je izbrana transformacija. Torej, za Barnsleyjevo praproti, je transformacija f1 izbrana 1% časa, f2 je izbrana 85% časa, in f3 in f4 sta vsakokrat izbrana 7% časa. Če je to malo zmedeno, pomislite, kot da ste napolnili vrečko s 100 frnikolami, od katerih je vsaka označena z eno od teh funkcij. Imeli bi 1 marmor za f4, 85 za f2, 7 za f3 in 7 za f4. Ob vsaki ponovitvi ste naključno vzeli marmor iz vrečke, si ogledali nalepko, uporabili ustrezno transformacijo in nato marmor vrnili v vrečko.

controlP5

Zdaj, ko razumete osnovno idejo IFS fraktalov, si poglejmo na kontrolni plošči, ki jo je Andreas Schlegel ustvaril za ustvarjanje znanih uporabniških vhodnih kontrol, kot so te:

Uporabili bomo kontrolnik »gumb«, da uporabniku omogočimo, da določi število ponovitev, ki se uporabljajo za ustvarjanje risbe, in nadzor »radia«, da izbere, kateri IFS sistem bo prikazan.

Preden lahko uporabimo knjižnico v naši skici, jo moramo namestiti. Prvi korak je zagotoviti, da imate v imeniku Sketchbook imenik »knjižnice«. Imenik Sketchbook najdete tako, da odprete okno Preference za obdelavo. Na vrhu boste videli ime imenika:

Ko najdete glavni imenik, uporabite orodje, kot je Window Explorer, iskalnik Mac, ali zanesljiv terminal UNIX, da preverite, ali obstaja podimenik z imenom »knjižnice«. Če je tako, ste vse nastavljeni. Če ne, potem ustvarite podimenik (ne pozabite ga poimenovati »knjižnice«).

Nato ste pripravljeni za namestitev programa controlP5. Pojdite na glavno stran controlP5 in kliknite povezavo za prenos najnovejše različice knjižnice. (Povezavo najdete v zelenem polju na vrhu, na sredini zaslona.) Ko prenesete datoteko, jo raztegnite in jo kopirajte v poddirektorij »knjižnice«. Znova zaženite obdelavo in videli boste, da je knjižnica prikazana pod točko menija »Skica -> Uvozi knjižnico«.

Ko je knjižnica nameščena, znova zaženite Processing. Zdaj smo pripravljeni malo govoriti o tem, kaj je fraktalna stran projekta.

Nastavite skico

Whew! To je bilo veliko preglednega materiala, toda zdaj, ko je nameščen controlP5, smo pripravljeni za uporabo obdelave za izvedbo prej opisanega sistema IFS. Zaženite Obdelava, nato pa prilepite naslednjo kodo v urejevalnik besedila. (Kot vedno lahko označite celotno kodo v naslednjem polju in nato pritisnete ctrl_c ali pa kliknete to povezavo na controlp5_fractals.pde in nato uporabite kombinacijo ctrl + a, ctrl + c.)

Obstaja nekaj, kar boste verjetno opazili, ko boste pregledali primer: vsebuje več definicij razredov na koncu datoteke. V zadnjem Codeboxu, Swat in (arrailistu) ciljev smo vse razrede postavili v ločene zavihke. Toda to ni potrebno - vse je v redu, če jih vse združimo v eno samo datoteko, kot sem jaz naredil tukaj. Če jih želite razdeliti na ločene zavihke, preprosto poimenujte datoteko kot razred.

Poženite kodo in videli boste nekaj zelo podobnega videu na začetku te objave. S klikom na izbirne gumbe lahko izberete enega izmed številnih IFS fraktalov in lahko z gumbom nastavite število iteracij.

Diskusija

Koda opredeljuje tri razrede, ki služijo kot gradnik za projekt:

  • Razred preoblikovanja. Ta razred izvaja vse matematike, ki so vključene v transformacijsko matriko. Večina kode je namenjena samo shranjevanju vseh spremenljivk. The evalX () in evalY () vrnite nove koordinate X in Y za točko, v katero ste vstopili.
  • Razred IFS. Ta razred izvaja podatkovne strukture IFS. Sestavljen je iz razredov ArrayList Transform preoblikovati, ArrayList, ki predstavlja frekvenčno porazdelitev imenovanih transformacij histogram (Razširitev naše prejšnje analogije, to je vreča frnikole, ki jo bomo uporabili za izbiro naključne transformacije), in opis. Ključne metode so: so addTransform (), ki doda novo Transformo transformacija seznam; addHistogram (), ki doda nov »marmor« histogram frekvenčne porazdelitve, ki temelji na Transform str vrednost; in selectRandomTransform (), ki se uporablja za naključno izbiro ene od transformacij glede na frekvenčno porazdelitev, določeno v. t histogram ArrayList.
  • Razred točke. Zadrži koordinate x in y za točke v fraktalu.

Te razrede uporabljamo na različne načine v glavnem programu. Prvič, v verjetno najbolj opaznem delu kode uporabljamo IFS in Transform, da definiramo različne fraktale, ki jih želimo prikazati. Tukaj je na primer koda za ustvarjanje Barnsley Fern:

c = novi IFS ("Classic Barnsley Fern"); c.addTransform (nova Transformacija (0.0, 0.0, 0.0, 0.16, 0.0, 0.0, 0.01)); c.addTransform (nova Transformacija (0.85, 0.04, -0.04, 0.85, 0.0, 1.6, 0.85)); c.addTransform (nova Transformacija (0.2, -0.26, 0.23, 0.22, 0.0, 1.6, 0.07)); c.addTransform (novi Transform (-0.15, 0.28, 0.26, 0.24, 0.0, 0.44, 0.07)); patterns.add (c);

In tukaj je koda za določanje zmajske krivulje:

c = novi IFS ("Dragon"); c.addTransform (nova Transformacija (0.5, -0.5, 0.5, 0.5, 0.0.0.0, 50)); c.addTransform (nova Transformacija (-0,5, -0,5,0,5, -0,5,1,0,0,0, 0,50)); patterns.add (c);

Nato nastavimo gumb controlP5 in izbirni gumb. Za to sta potrebna dva koraka. Prvi se pojavi v nastaviti() Metoda, kjer se dve skici dodata skici. Dodajanje gumba je dokaj preprosto in zahteva samo eno vrstico:

iterationKnob = controlP5.addKnob ("iteracijsko kljun", N_MIN, N_MAX, N, 10,10,50);

Izbirni gumb zahteva le malo več kode, saj poleg dodajanja samega kontrolnika moramo dodati tudi elemente, ki jih je mogoče izbrati. To naredimo tako, da prekrižemo ArrayList vzorcev IFS in nato uporabimo opis kot izbirni element v izbirnem gumbu. Tukaj je koda:

ifsRadio = controlP5.addRadio ("ifsSelect", 70,10); za (int i = 0; i <patterns.size (); i ++) {IFS p = (IFS) pattern.get (i); ifsRadio.add (p. opis, i); }

Drugi del uporabe knjižnice controlP5 je nastavitev metode ukrepanja ki se sprožijo, ko uporabnik komunicira s kontrolnikom. Ključ je, da metodi podate isto ime kot opis *, ki ste ga uporabili, ko ste dodali nadzor, in ne ime spremenljivke primerka kontrolnika. Na primer, ko smo dodali ifsRadio uporabili ifsSelect kot opis. To pomeni, da potrebujemo ustrezno metodo ifsSelect () prejemanje klikov, ki jih bodo uporabniki ustvarili na kontrolniku. Ta metoda mora imeti tudi parameter, ki bo imel trenutno vrednost kontrolnika.

Torej, za ifsSelect () metoda, imamo parameter, ki nam bo povedal indeks izbranega elementa seznama. Nato bomo s tem indeksom pridobili pravilen vzorec IFS in ga prikazali kot trenutni. Naslednji diagram povzema vse elemente v igri. (Kontrolniki controlP5 vse delujejo nekoliko drugače, vendar ima spletno mesto odlične primere, kako jih uporabljati vse.):

Zadnji del sestavljanke je makeIFS () metoda, ki omogoča dejanske izračune, potrebne za ustvarjanje fraktala. Ker so IFS sistemi tako elegantni, ni res veliko za povedati. Preprosto prekrivamo število iteracij, podanih v spremenljivki N (katerega vrednost je nastavila iterationKnob () metodo), izvlecite transformacijo iz trenutnega sistema IFS (katerega vrednost je bila nastavljena v ifsSelect () metoda) in nato dodajte vsako točko v niz predmetnih točk. Prav tako spremljamo razpone vrednosti X in Y, tako da lahko ujemamo sliko, da zapolnimo območje za risanje.

Več: Oglejte si vse stolpce Codebox

V skladišču izdelovalca:


Uvod v obdelavo Naučite se računalniškega programiranja na preprost način z Obdelovanjem, preprostim jezikom, ki vam omogoča uporabo kode za ustvarjanje risb, animacij in interaktivne grafike. Programski tečaji se običajno začnejo s teorijo, toda ta knjiga vam omogoča, da skočite naravnost v kreativne in zabavne projekte. Idealen je za vsakogar, ki se želi naučiti osnovnega programiranja in služi kot preprost uvod v grafiko za ljudi z nekaj programerskimi veščinami.

Delež

Pustite Komentar