Zadania programovacích a modelovacích projektov
Pokyny a pravidlá odovzdávania
Všetky vypracovania odovzdávate výhradne do zdieľaného priečinku, ku ktorému máte jedinečný prístup cez univerzitné konto (dostanete upozornenie na email).
Termín odovzdania zadaní je 7. jún 2026.
Vyberáte si a odovzdávate 3 zadania (dokopy za 30 bodov) podľa vašej preferencie a tie budú hodnotené. V prípade, že odovzdáte viac zadaní, do hodnotenia sa zarátajú len prvé 3 s najhoršími výsledkami.
K programovacím zadaniam:
- Každé zadanie vypracujte ako osobitný skript (t. j. osobitný .py súbor), ktorý pomenujete vo formáte (# je číslo zadania, a zadávate vlastné priezvisko):
P#_priezvisko.py
- Pri vypracovaní každého zadania je možné využívať umelú inteligenciu (AI) za nasledovných podmienok:
- V osobitnom textovom súbore, alebo ako komentár priamo v skripte, čo najpodrobnejšie uvediete názov výrobcu, služby a verzie (modelu), ktorú využívate (napr. "OpenAI, ChatGPT EDU", "Anthropic, Claude Opus 4.1" a pod.).
- Uvediete, akým spôsobom využívate danú službu, najmä či ju používate prostredníctvom četu na generovanie kódu, alebo využívate agentov.
- Pre každý vygenerovaný kus kódu je potrebné uvádzať presné znenie príkazov (promptov), ktorými ste ich získali. Toto je výhodné uvádzať priamo ako komentáre v kóde.
- Pokiaľ využívate AI nepriamo (napr. na vysvetľovanie, ako sa používajú knižnice, ako sa implementujú niektoré špecifické paradigmy a pod.), uveďte aj tieto časti komunikácie s AI.
- Za splnenie požiadavok zadania a funkčnosť kódu (a teda aj hodnotenie vypracovania) preberáte plnú zodpovednosť Vy ako autori, nezávisle od využitia a rozsahu využitia umelej inteligencie.
- Obsah a implementácia programovacích zadaní môže byť súčasťou skúšky.
K modelovacím zadaniam:
- Odovzdávate všetky súbory (t. j. blenderovské súbory (.blend), sprievodné fotky a obrázky).
- Okrem zdrojových súborov pripojte aj krátky komentár, kde opíšete postup modelovania, t. j. vymenujete techniky, ktoré ste použili na vymodelovanie konkrétnej časti (napr. rúčku sme vytvorili extrudovaním, následným rozdelením na viac častí a posunutím na správne miesto). Môžete vyhotoviť aj screenshot a jednotlivé techniky vyznačiť priamo na modeli.
- Modelovaciu úlohu odovzdajte do priečinka s názvom "Modelovanie".
Programovacie zadania
P1 - Vnútro a vonkajšok mnohouholníka (10 bodov)
VSTUP: Používateľ zadá klikaním myši do okna \( n \) bodov \( V_1, ..., V_n \in \mathbb{R}^2 \). Tieto body tvoria vrcholy \( n \)-uholníka \( \mathcal{P} \) (v zadanom poradí), pričom môžete predpokladať, že používateľ zadá iba jednoduchý \( n \)-uholník (nemusíte teda ošetrovať diery a samoprieseky).
VÝSTUP: Po stlačení klávesy "Enter" alebo kliknutím na tlačidlo sa vygeneruje \( m \) bodov \( P_1, ..., P_m \in \mathbb{R}^2 \) s náhodnými súradnicami tak, aby všetky boli viditeľné v okne, pričom:
- \( m \) je fixne zvolené číslo, avšak musí platiť \( m \geq 100 \)
- Každý bod je vykreslený ako kruh, pričom výplň sa vyberá z dvoch kontrastných farieb - body vo vnútri \( \mathcal{P} \) majú farbu č. 1 a body vo vonkajšku \( \mathcal{P} \) majú farbu č. 2.
- body na \( \partial \mathcal{P} \) môžete fixne stotožniť ako všetky vnútorné alebo všetky vonkajšie.
Korektnosť vypracovania bude posudzovaná na základe správneho rozhodovania parity bodov a výkonu pre rôzny typy mnohouholníkom v zmysle počtu reflexných vrcholov a celkového počtu vrcholov. Odporúča sa testovať korektnosť aplikácie pre čo najväčšie \( n \) (napr. \( n > 25 \) ).
ĎALŠIA FUNKCIONALITA: Obrazovku a všetky údaje je možné zmazať stlačením tlačidla "Zmazať" a následne zadávať \( n \)-uholník odznovu.
P2 - Hypocykloidy a epicykloidy (10 bodov)
Hypocykloida/epicykloida je krivka, ktorá vznikne pohybom bodu po kružnici \( \mathcal{K}_1 \) s polomerom \( r \geq 0 \), ktorá sa valí (bez kĺzania) po kružnici \( \mathcal{K}_2 \) s polomerom \( R = kr, k > 0 \) z vnútornej/vonkajšej strany:
Hypocykloida pre \( k = 4 \)
Epicykloida pre \( k = 3 \)
Všimnime si, že pre celočíselné hodnoty nám parameter \( k \) určuje počet cípov/lístkov hypocykloidy/epicykloidy.
VSTUP: Používateľ zadáva hodnotu \( k \) ako textový vstup a je možné zadávať aj desatinné čísla. Následne je možné vyberať medzi hypocykloidou a epicykloidou pomocou ToggleButton, prípadne stlačením dvoch rôznych tlačidiel/kláves.
VÝSTUP:Po stlačení tlačidla sa spustí animácia vykreslenia cykloidy (analogicky, ako je v uvedených linkoch) nasledovným spôsobom:
- animácia by mala trvať 5 sekúnd, pričom za každú sekundu by sa malo okno obnoviť aspoň 25x (t. j. framerate by mal byť 25fps (snímok za sekundu), prípadne viac). V závislosti od výkonu Vašej grafickej karty a procesoru, môžete s týmito parametrami hýbať, aby na Vašom stroji animácia prebehla bez problémov.
- Jednotlivé krivky vykresľujete ako lomené čiary s dostatočným počtom vrcholov, aby vizuálne krivky pôsobili hladko.
- V každej nasledovnej snímke sa nachádza aproximujúca lomená čiara s väčším počtom vrcholov (krivka sa postupne predlžuje). TIP: V každej snímke budete pravdepodobne chcieť, aby pribudol viac než jeden vrchol, aby ste dodržali predošlú odrážku.
- V každej snímke budú zrozumiteľne vyznačené nasledovné objekty:
- Kružnice \( \mathcal{K}_1 \) (vždy v príslušnom momente pohybu) a \( \mathcal{K}_2 \)
- Posledný vrchol aproximujúcej lomenej čiary ako krúžok s priemerom väčším ako je hrúbka ťahu čiary. Tento vrchol vždy leží na kružnici \( \mathcal{K}_1 \).
- Doposiaľ vykreslenú lomenú čiaru (na konci animácie to teda je aproximácia celej hypocykloidy/epicykloidy)
- Hodnotu \( r \) a stred kružnice \( \mathcal{K}_2 \) volíte tak, aby v každom momente boli v okne viditeľné všetky objekty (t. j. \( \mathcal{K}_1 \), \( \mathcal{K}_2 \) a aproximujúca lomená čiara) bez orezania.
ĎALŠIA FUNKCIONALITA: Obrazovku a všetky údaje je možné zmazať a následne spustiť s aktuálnymi parametrami stlačením tlačidla "Reštartovať".
P3 - Triangulácie sedemuholníka (10 bodov)
VSTUP: Používateľ zadá klikaním myši do okna 7 bodov \( V_1, ..., V_7 \in \mathbb{R}^2 \). Tieto body tvoria vrcholy sedemuholníka \( \mathcal{S} \) (v zadanom poradí), pričom môžete predpokladať, že používateľ zadá iba jednoduchý sedemuholník (nemusíte teda ošetrovať diery a samoprieseky).
VÝSTUP: Po stlačení klávesy "Enter" alebo kliknutím na tlačidlo sa do okna vykreslia všetky triangulácie sedemuholníka \( \mathcal{S} \) nasledovným spôsobom:
- Každú trianguláciu vykreslíte ako uniformne preškálovanú zmenšeninu \( \mathcal{S} \) spolu s diagonálami (t. j. pôvodný sedemuholník môžete zmazať) tak, aby sa všetky zmestili na obrazovku. TIP: Rozmyslite si, aký je najväčší dosiahnuteľný počet triangulácií pre sedemuholníky a na základe toho rozdeľte okno do mriežky a prispôsobte tomu jeho veľkosť.
- Strany sedemuholníka a diagonály sú odlíšené dvoma kontrastnými farbami.
Korektnosť vypracovania bude posudzovaná na základe správneho rozhodovania, ktoré dvojice vrcholov tvoria diagonálu a ktoré nie.
ĎALŠIA FUNKCIONALITA: Obrazovku a všetky údaje je možné zmazať stlačením tlačidla "Zmazať" a následne zadávať sedemuholník odznovu.
P4 - Priemet kocky (10 bodov)
VSTUP: Používateľ zadáva súradnice bodu \( P \in \mathbb{R}^3 \) a súradnice dvoch lineárne nezávislých vektorov \( \vec{u}, \vec{v} \in \mathcal{V}(\mathbb{R}^3) \) ako textové vstupy. Rovnakým spôsobom možno zadať stred premietania \( C \in \mathbb{R}^3 \) a smer premietania \( \vec{d} \in \mathcal{V}(\mathbb{R}^3) \). Používateľovi je umožnené vybrať medzi stredovým a rovnobežným premietaním pomocou ToggleButton, prípadne stlačením dvoch rôznych tlačidiel/kláves.
VÝSTUP: Po stlačení klávesy alebo kliknutím na tlačidlo sa do okna \( \mathcal{W} \) vykreslí priemet jednotkovej kocky \( [0,1] \times [0,1] \times [0,1] \subset \mathbb{R}^3 \) do roviny \( \rho \) zadanej bodom \( P \) a vektormi \( \vec{u}, \vec{v} \) vo vybranom type premietania, pričom:
- Okno \( \mathcal{W} \) zobrazuje časť roviny \( \rho \) tak, že súradnicová sústava \( \langle P, \vec{u}, \vec{v} \rangle \) je vycentrovaná vzhľadom na stred okna \( \mathcal{W} \), t. j. bod \( P \) je stred \( \mathcal{W} \) a osi \( u, v \) sú rovnobežné s vodorovnou a zvislou hranou okna \( \mathcal{W} \) (v tomto poradí). TIP: Pre lepšiu ilustráciu, danú súradnicovú sústavu môžete vykresliť.
- Ďalej sú v okne vykreslené osi priestoru \( \mathbb{R}^3 \) - os \( x \) červenou farbou, os \( y \) zelenou farbou a os \( z \) modrou farbou.
- Kocku vykreslite ako drôtený model (t. j. vykreslite jej hrany, bez ohľadu na viditeľnosť) odlišnou farbou od osí a väčšou hrúbkou ťahu.
ĎALŠIA FUNKCIONALITA: Kocku je možné posúvať v smere osí \( x, y, z \) v kladnom a zápornom smere stlačením vhodne zvolených kláves, pričom po každom stlačení sa priemet prekreslí.
P5 - Štvorbodová rafinačná schéma (10 bodov)
VSTUP: Používateľ zadáva vrcholy uzavrejtej lomenej čiary (mnohouholníka) \( P_0, ..., P_n \in \mathbb{R}^2 \), počet iterácií \( k = 0, ..., 5 \) a parameter \( \omega \in [0, 1] \), ktorý je navzorkovaný na \( 16 \) dielikov, t. j. je možné zadávať hodnoty \( \frac{0}{16}, \frac{1}{16}, ..., \frac{1}{16} \). Vrcholy a hrany lomenej čiary sú počas celého behu aplikácie zrozumiteľné znázornené.
VÝSTUP: Po stlačení klávesy "Enter" alebo kliknutím na tlačidlo sa do okna vykreslí rafinačná krivka pomocou štvorbodovej schémy so zadaným počtom iterácií \( k \) a parametrom \( \omega \).
ĎALŠIA FUNKCIONALITA:Po kliknutí na vrchol a následnom ťahaní sa rafinačná krivka automaticky prekreslí. Prekresľovanie prebieha už počas ťahania myši, nie až po uvoľnení jej tlačidla.
Modelovacie zadanie (10 bodov)
- Vyberte si ľubovoľný objekt, ktorý viete zachytiť fotoaparátom, čo sa týka jeho veľkosti.
- Odporúča sa, aby vybraný objekt bol symetrický (napr. vzhľadom na nejakú rovinu), napr. šálka, fľaša, šachová figúrka atď.
- Umiestnite objekt na kontrastnú podložku a pozadie (napr. biely papier) a vyhotovte fotografie, ktoré ho zachytávajú z rôznych pohľadov. TIP: mali by ste si vystačiť s tromi pohľadmi -- nárys, bokorys, pôdorys. Skreslenie viete eliminovať tak, že pri pôdoryse využijete gyroskop (väčšina smartfónov dokáže identifikovať polohu "v rovine") a pri náryse/bokoryse umiestnite telefón v rovnakej výške a vzdialenosti od stredu objektu (referenčné body si môžete vyznačiť na papieri).
- Následne tieto fotografie vložte do Blenderu a pokúste sa vymodelovať objekt analogickým princípom ako na cvičeniach (t. j. modelujete v jednotlivých pohľadoch).
- Objekt zvoľte tak, aby ste pri jeho modelovaní využili transformácie, krájanie po slučkách, extrudovanie a taktiež modifikátory, napr. zrkadlenie a subdivision surface.