Optikai csalódások

OptikaiCsalodas0A grafikus felülettel rendelkező Java programok (Swing, FX, webkomponensek, HTML+CSS) fejlesztése során igény adódhat arra, hogy a GUI komponensek saját beépített rajzoló/renderelő képességét felülírjuk/-definiáljuk, hogy egy-egy nyomógomb, menüpont, rádiógomb másképpen nézzen ki. Léteznek beépített rajzoló funkciók is.

Ha például grafikont kell beilleszteni egy alkalmazásba, akkor használjunk és igényeink szerint szabjunk testre egy JFreeChart csomagbeli grafikont, illetve előfordulhat, hogy találhatunk egy olyat a JFreeChart Demo-ban, ami éppen megfelel a megrendelő igényeinek.

Persze a műfaj nem ér itt véget. Időnként kreatívabb ábrák, rajzok, grafikák megjelenítésére is használhatjuk a beépített – általában téglalap alakú – komponenseket. Ehhez egyszerűen csak felül kell írni/definiálni a paint() metódusukat és vászontechnikával, a megszokott képernyős koordináta-rendszerben, grafikai primitíveket (pont, téglalap, ellipszis) és színeket kell megfelelően paraméterezni.

Az optikai csalódások igen népszerűek, és az egyszerűbb fiziológiai és kognitív illúziók könnyen lerajzolhatók a fenti eszköztárral, hiszen csupán színek, alakzatok, kontraszt, távolság, mélység, térhatás segítségével valósulnak meg.

Íme három egyszerű példa, hogyan állítható elő optikai csalódás Java implementációval!

1. példa

Optikai csalódás 1

2. példa

Optikai csalódás 2

3. példa

Optikai csalódás 3

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Aki ezek után kedvet kapott, keressen hasonló ábrákat és tervezve, kódolva, tesztelve gyakoroljon! Ajánlom ezeket a weboldalakat:

Hasonló feladatok megoldásához a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 29-36. Grafikus felhasználói felület alkalma után bátran hozzá lehet fogni, illetve érintjük még a GUI témakört a Java adatbázis-kezelő tanfolyam 33-40. óra: Grafikus kliensalkalmazás fejlesztése JDBC alapon alkalommal is.


Ajánljuk a Java SE szoftverfejlesztő tanfolyam kategóriából

“Optikai csalódások” bejegyzéshez 7 hozzászólás

  1. Mit tanuljak meg, hogy ilyet tudjak programozni Java-ban?

    Nem kell konkrét forráskód, csak néhány hívószó. Maradjon némi 🙂 kihívás.

    Válasz
    • András: ennek a Java része egyszerű: vászontechnika, grafikai primitívek, színkódolás, drawPolygon() metódus. Ez nem animáció, csak annak tűnik. 😉

      A kihívást jelentő rész inkább matematika: koordináta-geometria, homogén koordináta- és ponttranszformációk (műveletek: eltolás, elforgatás, skálázás), síkidomok és testek egyenletei és metszéspontjaik meghatározása, 3D->2D vetítés (axonometrikus, perspektivikus). Ennyi kezdésnek elegendő lehet.

      Még haladóbb a térinformatikai megközelítés, ha ismersz felületek lefedésére használható tesszelációs textúrázó algoritmusokat és néhány vetületet (ezekkel most hatszögeket kell például gömbre feszíteni).

      Válasz
      • Látom, mélyen belekérdeztem és még nem tartok ott. És ehhez az egyszerűbb ábrához hogy fogjak hozzá? Milyen egyenlete van a görbének?
        Optikai csalódás

        Válasz
        • Könnyebb sikerélményed egyszerű csalással András például így lehet:

          • indulj ki a példatár AnalogOra forráskódjából, nézd meg hogyan mozgatja az időzítő körbe a másodpercmutatót,
          • egy ív igazából kitöltött körökből áll, amelyeknek a mérete belülről kifelé növekszik és egymásra érnek,
          • írj egy ciklust, amely a középpontból kifelé halad például 3 óra irányba és mindig egyre nagyobb köröket rajzol,
          • módosítsd úgy a ciklust (teknőcgrafika), hogy ne csak egyenesen előre (kifelé) haladjon, hanem egy kicsit forduljon is el (háztömb körül, például előre 20 jobbra 2), bátran kísérletezz,
          • a konkrét adatok függjenek az aktuális kör sugarától és máris egyenlet nélkül görbét kaptál,
          • az eddigieket tedd metódusba vagy ágyazd bele egy másik ciklusba úgy, hogy közben a középpontban elfordulsz következetesen mindig ugyanabba az irányba (ha például 20 spirált szeretnél kapni, akkor 360/20=18 fokkal).

          Ezzel kapsz egy egyszerű, térbeli hatást keltő, a nézőponttól távolodó hatást keltő ábrát. Ha ez már megy, akkor visszatérünk a görbe egyenletére.

          Válasz
  2. Nem a fentiek szerinti szabályos, ismétlődő elemekből álló, hanem másképpen trükkös optikai csalódás:
    Optikai csalódás: zebrák és tigris

    Válasz

Szólj hozzá!