Pereiti prie turinio

Fraktalų menas (paveikslėliai)


Rekomenduojami pranešimai

Jei norite rezultato - praleiskite šį ilgą pasakojimą iki paveikslėlių ;).

 

Labas vakaras, nusprendžiau išplaukti į platesnius vandenis (taip, neturiu jokios svetainės ir beveik niekur nepublikavau). Publikavau tatai viename forume, bet jis per mažas ir netinkamas tam, o šiandien toptelėjo, kad yra šis populiarus forumas ir jame galiu užsiregistruoti :)

 

Taigi, prie esmės: šioje temoje publikuosiu paveikslėlius. Vėliau galbūt įkelsiu ir pačią programą, kuri generuoja tuos paveiksliukus.

 

Trumpa istorija, kaip atsirado ši didinga programa: vasarą iš miesto bibliotekos pasiėmiau pasiskaitymui ir mokymuisi labai seną Grigo vadovėlį apie Paskalį, ji rašyta dar sovietmečiu, praeito amžiaus IX dešimtmetis.

Kompiuterius vadino ESM, o mašininio žodžio ilgis vos 5 bitai.

 

Žodžiu seniena, bet Paskalis tas pats. Atradau vieną mane sudominusį algoritmą: Paskalio trikampio principu konsolėje atspausdino iš pseudografikos ženklų (žvaigždutės *) dešimties eilučių piešinį. * buvo pažymėti menami langeliai (skaičiai) kurie dalijasi iš 2, o kurie ne - tiesiog tarpas. Bet tai buvo grubus piešinys, todėl pamaniau, kad galiu geriau padaryti šiuolaikinėmis priemonėmis, po trisdešimties metų nei tada.

 

Kadangi mokausi C#, ji man labai patinka, su ja ir perrašiau algoritmą, tiksliau, pats nuo nulio sukūriau algoritmą pagal koncepciją.

 

Vartotojas į programą įveda tris formules: x ašies užpildymo (masyve eilutė -nulinis indeksas), y ašies (masyve stulpelis, nulinis indeksas), ir visos likusios dalies užpildymo skaičiais formulę.

Užpildomi skaičiai pirmoje eilutėje ir stulpelyje. Paskui, operuojant jau turimais skaičiais (aukščiau ir kairiau esančiais), pildomi kiti masyvo elementai. Taip gaunu stačiakampio ar kvadrato formos masyvą, matricą, kiekviename masyvo elemente yra koks nors tai skaičius.

 

Kitas žingsnis - pagrindo spalvą; spalvinimo sąlygos ir spalvos. Vartotojas nurodo spalvas ir tam tikras sąlygas, pavyzdžiui ar skaičius (einama per visą masyvą į dešinę ir žemyn) dalijasi iš nurodyto skaičiaus, ir jei taip, funkcija grąžins true, ir Bitmap'e nuspalvins nagrinėjamo masyvo elemento koordinates atitinkantį pikselį.

 

Radau savo programos fragmento screenshotą, šioje dalyje pavaizduotos sąlygos

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58075

 

Ateityje iliustruosiu programos screenshotais ir pačią programą prisegsiu. Šį vakarą kol kas sugeneruoti paveikslėliai iš seniau:

Menger kempinės dvimatis modelis:

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58154

Ulamo staltiesė (kitoks algoritmas, masyve skaičiai pildomi nuo 1 iki n spirale ir trikrinama ar skaičiai pirminiai):

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=57866

Eratosteno rėtis

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=57865

Šitą pats žaisdamas su skaičiais atsitiktinai išgavau, pamačiau - gražus, išsaugojau.

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58082

 

Tiek šį kartą, kitą dieną įkelsiu daugiau nuotraukų :)

 

Parašykite ką manote.

 

P.S. forumas neatvaizduoja nuotraukų :( Teks ant nuorodų spaudinėt kol kas.

 

Pridedu dar vieną iš kompiuterio įkeltą nuotrauką:

post-107982-0-48590100-1446842768_thumb.jpg

Redagavo Winix
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nauda - tai ne tik pinigai, bet ir patogumas, malonumas ir t.t.. Ne noriu sakyti savo nuomonės dėl gražumo ir meniškumo, kad neįžeisti tavo meniškos dvasios... geriau paklausk apie tai dizainerius... bet jaučiu kad jų nuomonė sutaps su mano. Galvojau kur galima panaudoti... ir tik paskutiniam radau pritaikymą – gal kaip kilimų raštas? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Niekis, aš šios programos tikrai į apyvartą nežadu leist, pats sau susikūriau, parodžiau šį bei tą jums, didesniam ratui žmonių, kad įvertinti maždaug. Apibendrindamas galiu pasakyt, kad niekam tikusi ir niekam nereikalinga tai, tik man vienam :) Tiesiog įdomu buvo pamatyt fraktalus, kurių pavaizdavimas dar prieš daugiau nei 70 metų buvo neįmanomi, egzistavo tik teorinės formulės. Aš pagal vieną iš paprasčiausių formulių sukūriau programą (daug skirtingų variacijų galima išgauti, bet koncepsija ta pati, kokia ji - pirmame post'e).

O "menas", kaip ir skonis, kiekvienam savas, bet negalima paneigti, kad skaičiai patys sau meną susikuria be jokių menininkų piešinių. Viskas griežtai tvarkinga, tik reikia mokėti pažvelgti reikiamu kampu, nuspalvinti reikiamomis spalvomis, ir še, gal koks nors paprastas bet ne prastas logotipas gausis, arba praktiškai galima dar pritaikyti - atsitiktiniam avatarų generatoriui mažais gabaritais, turbūt matėt po Wordpress komentatorių automatinius avatarus :D.

 

Tai tiek, o trumpai tariant, neieškokite šioje temoje naudos, programa tik man suprantama.

 

 

Galvojau kur galima panaudoti... ir tik paskutiniam radau pritaikymą – gal kaip kilimų raštas?

Taip, ne vienas man sakė kad galima raštus kurti. O viena mezgėja kažką irgi minėjo kad gal ieškos raštų iš šių paveikslėlių :D

Redagavo Winix
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomūs paveiksliukai gavosi :) . Pasidalinsiu ir aš savo neseniai parašyta programa:

http://valdas0.bitbucket.org/index.html

Atsidarę aišku atpažinsite Sierpinskio trikampį (juk žinote kas yra Sierpinskio trikampis?). Laukas iteration valdo fraktalo "tikslumą". Jei programa strigs, tai sumažinkite šį parametrą, o jei norėsite daugiau trikampių - padidinkite. Svarbiausi laukai yra a, b, c ir d. Tai kompleksiniai skaičiai kurie valdo

, kuri yra atliekama Sierpinskio trikampiui. Ji kiekvienam fraktalo taškui pritaiko transformaciją f(z) = (a*z+b)/(c*z+d). Manau per daug prasmės nėra gilintis kas tai per transformacija, jei bus įdomu, tai patys apie tai paskaitysite ar tiesiog paklausite manęs. Keletas įdomių transformacijų, kurias atradau eksperimentuodamas (suveskite sekančius kompleksinius skaičius į atitinkamus laukus ir paspauskite start):

 

a = 1+0i        a = 0        a = 10            a = 0
b = 0+0i        b = 1        b = 0            b = 1
c = 1+0i        c = 5        c = -10 + 10i    c = -5
d = 1+0i        d = i        d = i            d = i

Įdomiausia pačiam pakaitalioti tuos parametrus ir pažiūrėti kas gaunasi :). Kai vyks transformacija matysite, kad keičiasi fraktalo spalvos, taip yra todėl, nes aš padariau, jog skirtingas iteracijas spalvintų įvairiomis spalvomis ir dar padariau taip, kad spalvintų trikampį tik tada, jei tas trikampis nėra per mažas, jog būtų matomas (taip pat nespalvinu didelių trikampių, nes jie šiek tiek gadina vaizdą). Programą parašiau naudodamas pixi.js, tad galite net ir per telefoną atsidaryti tą tinklapį, bet nerekomenduoju to :D

Na o dėl fraktalų "naudos", tai jais pasinaudojus galima parašyti nuotraukų suspaudimo programą (ką aš greitu metu ketinu padaryti). Sako, kad jis suspaudžia geriau nei jpeg, bet šiais laikais jau visiškai nebenaudojamas dėl įvairių priežasčių. Paieškojus dar galima surasti taikymų kompiuterinėje grafikoje, inžinerijoje ar net medicinoje. O šiaip, tai nereikia būti nuobodomis ir visur ieškoti kažkokios naudos, galima kažką daryti, nes tai tiesiog yra įdomu :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labas, puikiai padirbėta! Pagaliau sulaukiau bendraminčių :) Pritariu, nes tobulėjame tik dėl smalsumo ir eksperimentuodami, o ne ieškodami pirminės naudos (Arik'ui).

 

Taip, man ir gavosi Sierpinskio trikampis šioje nuotraukoje https://uzdarbis.lt/index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=233093

 

 

 

Tai tiesiog Paskalio trikampio skaičių, kurie nedalūs iš 2, spalvinimas. Tavo programa leidžia labiau manipuliuoti tų trikampių dydžiais, sudėtingesnė.

Tik nelabai suprantu su nuotraukų suspaudimu naudojant fraktalus, kaip tai įmanoma?

 

Tavo svetainėj patalpintą programa, kaip mano prototipinė desktopinė kol kas neturi "saugiklių" nuo apkrovimų, nėra galimybių nutraukti užstrigusio proceso.

Su tavo JavaScript programa susitvarkyti dar sunkiau nes nėra apsaugų, pavyzdžiui aš nurodžiau Iteration 13, a = 2, dar kitą raidę vienu skaitmeniu didesniu, tai naršyklė užėmė laaabai daug RAMŲ - net 2 GB, žinant, kad pas mane tėra 4 GB. Gaunasi labai didelės apkrovos ir nelabai eina ištestuot :( Išbandžiau su Firefoxu, Microsoft, šnipštas. Dar reikia tobulinti, galbūt perkelti algoritmą į dekstopinę programą kur eitų labiau manipuliuoti duomenimis :)

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Apačioje prisegu daug sudėtingesnį piešinį, tik gaila, neužsirašiau formulių...

Atitaikius tinkamas spalvas galima dar didesnį efektą sudaryti, šiose nuotraukose galima įžvelgti difrakcijas (žiūrėti nuorodas).

 

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58157

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58156

http://www.miestai.net/forumas/picture.php?albumid=1893&pictureid=58155

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vienas iš fraktalų "gaminimo" būdų yra naudoti iterated function system. Pagrindinė idėja yra apsirašyti tam tikrą transformacijų rinkinį, kuri tiesiog kartoji kažkokiam objektui daug kartų ir galiausiai gauni fraktalą. Teoriškai net nesvarbu kokiam pradiniam objektui naudosi tas transformacijas, nes galiausiai visad gausi tą patį fraktalą. O praktiškai skirtumas gali būti, nes tikrasis matematinis fraktalas yra gaunamas tik po begalinio kiekio iteracijų, o to realybėje pasiekti neišeina. Daugiau su IFS sukurtų fraktalų pavyzdžių (beje, gan lengva sukurti programą, kuriai kažkaip gali nurodyti kokias transformacijas daryti ir taip išgauti fraktalus. Pats esu sukūręs panašią programą).

Nuotraukas spaudžiančio algoritmo esmė yra išanalizuoti nuotrauką ir surasti transformacijų rinkinį, kuris atkurtų nuotrauką. Šis suspaudimo metodas yra "lossy", t.y. jis neatkuria originalaus failo, bet žmogus didelio skirtumo nepastebi(beje, jpeg formatas irgi yra lossy). Vienas įdomus dalykas su šiuo suspaudimo metodu yra tai, kad įmanoma atkurti didesnės rezoliucijos nuotrauką nei buvo originalas. Jei padidintum paprastos nuotraukos rezoliucija (na arba prizoomintum), tai pradėtum matyti pikselius, bet taip nebus naudojant šį algoritmą. Aišku, padidinęs žmogaus foto rezoliuciją šimtus kartų nepradėsi matyti jo ląstelių, bet nedideliems rezoliucijos padidinimams efektas gali būti visai neblogas. Čia gali pasižiūrėti į Lenos paveiksliukus tinklapio apačioje, pačio straipsnio gali neskaityti, nebent būtų labai įdomu :D

 

Dėl mano programos, tai didinant iteracijų skaičių skaičiuojamų trikampių skaičius auga eksponentiškai ir ties kažkuria iteracija kompiuteris jau pasiekia savo ribas ir pradeda nespėti atlikti skaičiavimų realtime. Tas skaičius žinoma priklauso nuo konkretaus kompiuterio. Aišku nesakau, kad nėra kur dar paoptimizuoti, bet šiuo metu neketinu sugrįžti prie šios programos.

 

P.S. Antra nuotrauka atrodo įdomiai :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ačiū; aš dar tobulinsiu savo programą, turiu šiokią tokią idėja - manipuliavimą ne viena eilutes/stulpeliais, o keliomis, tiek kiek bus sukurta jų iš pat pradžių žmogaus, o paskui užbaigs kompiuteris. Kai žinosiu kas gausis, ir atitiks lūkesčius, paskelbsiu, bet manau negreitai tai bus :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...