This shows you the differences between two versions of the page.
|
vdvac:tema2 [2024/05/18 18:49] anca.morar [Teorie] |
vdvac:tema2 [2024/05/22 16:50] (current) anca.morar [Barem (Total 250 puncte)] |
||
|---|---|---|---|
| Line 44: | Line 44: | ||
| * $Q(u_k)$ - poziții calculate cu formula parametrică a curbei (de ex, Bezier) | * $Q(u_k)$ - poziții calculate cu formula parametrică a curbei (de ex, Bezier) | ||
| * $S(u_k)$ - distanță calculată pe baza pozițiilor $Q(u_k)$ de pe curbă și a aproximării distanței parcurse pe arcul dintre $Q(u_k)$ și $Q(u_k - pas)$ prin lungimea segmentului dintre $Q(u_k)$ și $Q(u_k - pas)$. | * $S(u_k)$ - distanță calculată pe baza pozițiilor $Q(u_k)$ de pe curbă și a aproximării distanței parcurse pe arcul dintre $Q(u_k)$ și $Q(u_k - pas)$ prin lungimea segmentului dintre $Q(u_k)$ și $Q(u_k - pas)$. | ||
| - | * Atenție!! Trebuie să existe o corespondență între distanța calculată cu formula cubică polinomială și distanța calculată pe curba traiectorie (adică distanța maxim calculat polinomial (obținut pentru $u_i=1$) trebuie să fie egală cu distanța totală parcursă pe curba traiectorie (obținută pentru $u_k=1$). Un mod de a obține această corespondență este prin normalizarea distanțelor în intervalul [0,1] | + | * Atenție!! Trebuie să existe o corespondență între distanța calculată cu formula cubică polinomială și distanța calculată pe curba traiectorie; adică distanța maximă calculată polinomial (obținută pentru $u_i=1$) trebuie să fie egală cu distanța totală parcursă pe curba traiectorie (obținută pentru $u_k=1$). Un mod de a obține această corespondență este prin normalizarea distanțelor în intervalul [0,1] |
| **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)$, $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 53: | 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 59: | 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 68: | 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 79: | 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> | ||