Programarea Calculatoarelor - Laborator 1
Mișcarea unui obiect în plan
Veți primi un fragment de program care animează în mod grafic, pe ecran,
mișcarea în plan unui obiect.
Voi veți completa programul, fiind nevoie să scrieți doar legile mișcării,
urmând să vedeți pe ecran animația corespunzătoare celor scrise.
Mai precis, pentru componentele pe ambele axe (x și y) ale mișcării,
scrieți câte o funcție care descrie, la fiecare unitate de timp (intervalul
între două scene succesive de animație):
(1) poziția următoare, și
(2) viteza următoare,
ambele în funcție de poziția și viteza curentă,
și eventual alți parametri, depinzând de situația modelată. De exemplu:
- o bilă pe o masă de biliard, fără frecare: la atingerea unei margini,
ea ricoșează perfect (schimbând semnul vitezei pe direcția impactului).
- ca mai sus, dar la atingerea unei margini, bila reintră în scenă
de pe marginea cealaltă (continuând permanent mișcarea în același sens).
- un obiect care pornește din repaus de la un capăt, și trebuie cât mai
să ajungă la celălalt capăt, dar fără să-l lovească (reducând viteza până la zero). Viteza și accelerația (în valoare absolută) sunt limitate la valori date.
- un obiect care încearcă să urmăreasca/ajungă un alt obiect, cunoscând în permanență poziția și viteza acestuia, dar având limitări de accelerație și viteză
- un obiect care încearcă să intercepteze alt obiect, care se mișcă în
zigzag și își poate schimba direcția la un interval fix de timp.
- ... etc.
De exemplu, pentru prima variantă (bila de biliard), se cere să se
scrie în C funcțiile new_vx, new_vy, new_x, new_y pentru valorile
noi ale vitezei si poziției de-a lungul celor două axe. Toate funcțiile au
câte trei parametri: poziția, viteza curentă și dimensiunea mesei de-a
lungul axei respective. Timpul scurs între cele două momente de animație
(cel curent și cel nou pentru care se face calculul) se consideră o
unitate. Ecuațiile mișcării de-a lungul axelor x și y sunt, evident,
similare. Toți parametrii și rezultatele au tipul double, un tip
standard C pentru numere reale în precizie mai mare decât float.
Marius Minea
Last modified: Wed Feb 27 21:41:26 EET 2008