Differences

This shows you the differences between two versions of the page.

Link to this comparison view

vdvac:tema2 [2024/05/18 18:47]
anca.morar [Cerințe temă]
vdvac:tema2 [2024/05/22 16:50] (current)
anca.morar [Barem (Total 250 puncte)]
Line 2: Line 2:
  
 ====Animația obiectelor rigide==== ====Animația obiectelor rigide====
-Să se implementeze curbelor traiectorie și viteză (cursul 9).+Să se implementeze ​corelația ​curbelor traiectorie și viteză (cursul 9).
  
 ====Teorie==== ====Teorie====
Line 10: Line 10:
       * 4 puncte de control       * 4 puncte de control
       * Formula parametrică: ​ $Q(u) = P_0 \cdot (1-t)^3 + P_1 \cdot 3 \cdot t \cdot (1-t)^2 + P_2 \cdot 3 \cdot t^2 \cdot (1-t) + P_3 \cdot t^3$        * Formula parametrică: ​ $Q(u) = P_0 \cdot (1-t)^3 + P_1 \cdot 3 \cdot t \cdot (1-t)^2 + P_2 \cdot 3 \cdot t^2 \cdot (1-t) + P_3 \cdot t^3$ 
-  * Curba de viteză corelează timpul cu distanța parcursă de la obiect pe curba traiectorie+  * Curba de viteză corelează timpul cu distanța parcursă de obiect pe curba traiectorie
     * Distanța e măsurată prin lungimea arcului de curbă     * Distanța e măsurată prin lungimea arcului de curbă
     * Exemple: viteză constantă (curba este o linie dreaptă), accelerare lină la plecare și decelerare lină la sosire (curba ease-in ease-out)     * Exemple: viteză constantă (curba este o linie dreaptă), accelerare lină la plecare și decelerare lină la sosire (curba ease-in ease-out)
Line 20: Line 20:
       * $T(u) = u$       * $T(u) = u$
     * Exemple pentru curba ease-in ease-out     * Exemple pentru curba ease-in ease-out
-      * dacă $u<0.5$ atunci $S(u) = 2 \cdot u^2$,  +      * dacă $u<0.5$ atunci $S(u) = 2 \cdot u^2$, altfel $S(u) = - 2 \cdot u^2 + 4 \cdot u - 1$ 
-        * altfel $S(u) = - 2 \cdot u^2 + 4 \cdot u - 1$ +
       * $T(u) = u$  ​       * $T(u) = u$  ​
   * Corelația curbelor traiectorie și viteză   * Corelația curbelor traiectorie și viteză
Line 45: 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 traiectorieadică 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 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
  
 +====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>​
  
vdvac/tema2.1716047243.txt.gz · Last modified: 2024/05/18 18:47 by anca.morar
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0