This shows you the differences between two versions of the page.
vdvac:tema2 [2024/05/18 18:56] anca.morar [Detalii de implementare] |
vdvac:tema2 [2024/05/22 16:50] (current) anca.morar [Barem (Total 250 puncte)] |
||
---|---|---|---|
Line 48: | Line 48: | ||
**2.** **//Căutare binară//**: | **2.** **//Căutare binară//**: | ||
* determină poziția într-un vector ordonat, pentru care o valoare dată este egală (sau aproximativ egală) cu o valoare din vector | * determină poziția într-un vector ordonat, pentru care o valoare dată este egală (sau aproximativ egală) cu o valoare din vector | ||
- | * se poate folosi pentru inspirație metoda prezentată în slide-urile 20 și 21 din cursul 9 (totuși, dacă vectorii corespunzători lui $T(u_i)$, $T(S_i)$, $S(u_k)$ și $Q(u_k)$ sunt deja populați, nu mai e nevoie să se calculeze timpul sau distanța. | + | * se poate folosi pentru inspirație metoda prezentată în slide-urile 20 și 21 din cursul 9 (totuși, dacă vectorii corespunzători lui $T(u_i)$, $S(u_i)$, $S(u_k)$ și $Q(u_k)$ sunt deja populați, nu mai e nevoie să se calculeze timpul sau distanța. |
| | ||
| | ||
Line 54: | Line 54: | ||
* Se realizează asemanator cu animația de la laboratorul 5 (cu free form deformation) | * Se realizează asemanator cu animația de la laboratorul 5 (cu free form deformation) | ||
* Se stabileste timpul total al animației - timpul de parcurgere a curbei de către un obiect (in secunde) | * Se stabileste timpul total al animației - timpul de parcurgere a curbei de către un obiect (in secunde) | ||
- | * Se stabileste un numar de frame-uri intre care se realizează interpolare liniară (de exemplu, 10 sau 20) | + | * Se stabileste un numar de frame-uri intre care se realizează interpolare liniară (de exemplu, 10 sau 20) - sau se stabilește un interval de interpolare în milisecunde, și se verifică la fiecare frame dacă s-a atins acel interval |
* Când se ajunge la finalul unui interval de interpolare (adica într-un key frame), se determină timpul (cu GetElapsedTime()) | * Când se ajunge la finalul unui interval de interpolare (adica într-un key frame), se determină timpul (cu GetElapsedTime()) | ||
* Atât timp cât nu s-a finalizat animația (timpul curent este mai mic decât timpul total de parcurgere), se determină (prin căutare binară), $u_i$ astfel încât $T(u_i)$ calculat prin formula cubică polinomială să fie egal cu timpul curent | * Atât timp cât nu s-a finalizat animația (timpul curent este mai mic decât timpul total de parcurgere), se determină (prin căutare binară), $u_i$ astfel încât $T(u_i)$ calculat prin formula cubică polinomială să fie egal cu timpul curent | ||
Line 60: | Line 60: | ||
* Se determină $u_k$ (prin căutare binară), astfel încât $S(u_k)$ să fie egal cu $S(u_i)$ care fusese calculat mai devreme | * Se determină $u_k$ (prin căutare binară), astfel încât $S(u_k)$ să fie egal cu $S(u_i)$ care fusese calculat mai devreme | ||
* Dacă s-a determinat $u_k$, atunci se poate afla și $Q(u_k)$ | * Dacă s-a determinat $u_k$, atunci se poate afla și $Q(u_k)$ | ||
- | * Dacă nu suntem într-un key frame, atunci calculăm pozițiile prin interpolare liniară | + | * Dacă nu suntem într-un key frame, atunci calculăm pozițiile prin interpolare liniară între două key frame-uri |
Line 69: | Line 69: | ||
- Să se afișeze curba traiectorie în 3D | - Să se afișeze curba traiectorie în 3D | ||
- Să se afișeze o animație a unui obiect 3D (de exemplu, o sferă), care se deplasează pe curba traiectorie pe baza caracteristicilor mișcării stabilite prin curba de viteză | - Să se afișeze o animație a unui obiect 3D (de exemplu, o sferă), care se deplasează pe curba traiectorie pe baza caracteristicilor mișcării stabilite prin curba de viteză | ||
- | - Să se poată restarta animația (de exemplu, la apăsarea unei taste) | + | - Să se restarteze animația la apăsarea unei taste |
- | - Să se poată modifica fie curba traiectorie, fie curba de viteză (de exemplu, la apăsarea unei taste) și să se reia animația | + | - Să se modifice curba traiectorie sau curba de viteză la apăsarea unei taste și să se reia animația |
====Barem (Total 250 puncte)==== | ====Barem (Total 250 puncte)==== | ||
Line 80: | Line 80: | ||
- calculul unui parametru $u_k$ care corespunde unei distanțe $S(u_i)$, astfel încât $S(u_k) = S(u_i)$ | - calculul unui parametru $u_k$ care corespunde unei distanțe $S(u_i)$, astfel încât $S(u_k) = S(u_i)$ | ||
- calculul poziției $Q(u_k)$ | - calculul poziției $Q(u_k)$ | ||
- | - Redarea și animația corectă unui obiect pe curba traiectorie (100 puncte) | + | - Redarea și animația corectă unui obiect pe curba traiectorie (60 puncte) |
- | - Restartarea animației: 25 puncte | + | - Restartarea animației: 20 puncte |
- | - Selecția altor curbe de traiectorie / viteză și restartarea animației: 25 puncte | + | - Selecția altor curbe de traiectorie / viteză și restartarea animației: 20 puncte |
====Bonusuri posibile==== | ====Bonusuri posibile==== | ||
- | - Să se modeleze interactiv curbele traiectorie / de viteză prin drag-and-drop pentru punctele de control | + | - Să se modeleze interactiv curbele traiectorie / de viteză prin drag-and-drop al punctelor de control |
- Alte elemente interesante | - Alte elemente interesante | ||
+ | ====Demo==== | ||
+ | |||
+ | <html> | ||
+ | <p style="text-align:center;margin:auto;"> | ||
+ | <iframe width="430" height="250" src="https://www.youtube.com/embed/vrkdHtfRvx0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> | ||
+ | </p> | ||
+ | </html> | ||