Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Ambele părți revizuirea anterioară Versiuni anterioare Urmatoarea versiune | Versiuni anterioare Ultima versiune Ambele părți următoarea reviziune | ||
teme:tema2 [2017/02/15 00:43] florina_elena.barbu |
teme:tema2 [2017/04/09 17:35] mihai.iacov [Precizări] |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Tema 2: GPS tracker ====== | ====== Tema 2: GPS tracker ====== | ||
- | < | ||
- | <h2 id=" | + | ===== Obiective ===== |
- | <div class=" | + | |
- | < | + | |
- | <li class=" | + | |
- | <li class=" | + | |
- | </ | + | |
- | </ | + | |
- | < | + | * Înțelegerea conceptului de graf și a modurilor de parcurgere aferente |
- | <div class=" | + | * Aplicarea algoritmilor studiați pe topologie graf într-un exemplu practic |
- | < | + | |
- | | + | |
- | | + | ===== Descriere ===== |
- | | + | |
- | < | + | Sistemul Global de Poziționare (sau GPS) este o rețea de aproximativ 30 de sateliți care orbitează în jurul Pământului, |
- | Oriunde te afli pe planetă, cel puțin 3 sateliți sunt ' | + | Acesta a fost dezvoltat de guvernul Statelor Unite în scop militar, dar oricine folosește acum un dispozitiv GPS poate recepționa semnalele radio pe care sateliții le fac broadcast. |
- | | + | |
- | < | + | Oriunde te afli pe planetă, cel puțin 3 sateliți sunt ' |
- | Odată ce acesta are informații despre cât de departe cei trei sateliți sunt, receiver-ul GPS poate indica locația folosind un proces numit < | + | |
- | </ | + | Odată ce acesta are informații despre cât de departe cei trei sateliți sunt, receiver-ul GPS poate indica locația folosind un proces numit **trilaterație** . |
- | <p> <h3> Trilaterația (măsurarea distanțelor, | + | |
- | Imaginează-ți că stai undeva pe Pământ cu 3 sateliți deasupra ta. Dacă știi cât de departe ești de satelitul A, atunci trebuie să te afli undeva în cercul roșu. Dacă consideri la fel pentru sateliții B și C, poți afla locația ta precisă calculând intersecția celor 3 cercuri. </ | + | |
- | Asta este ceea ce receiver-ul GPS-ul tău face, deși acesta consideră sfere suprapuse (pentru simplificare, | + | |
| | ||
+ | === Trilaterația (măsurarea distanțelor, | ||
+ | Imaginează-ți că stai undeva pe Pământ cu 3 sateliți deasupra ta. Dacă știi cât de departe ești de satelitul A, atunci trebuie să te afli undeva în cercul roșu. Dacă consideri la fel pentru sateliții B și C, poți afla locația ta precisă calculând intersecția celor 3 cercuri. | ||
+ | Asta este ceea ce receiver-ul GPS-ul tău face, deși acesta consideră sfere suprapuse. | ||
+ | |||
+ | < | ||
<img src="/ | <img src="/ | ||
<img src="/ | <img src="/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Precizări ===== | ||
+ | |||
+ | Vom considera ca fișier de intrare // | ||
+ | |||
+ | Pe următoarele linii vom avea pentru fiecare locație: | ||
+ | | ||
+ | * | ||
+ | * raza R satelit1 | ||
+ | * | ||
+ | * raza R satelit2 | ||
+ | * | ||
+ | * raza R satelit3 | ||
- | </p> | + | \\ |
- | </ | + | Coordonatele și raza se consideră date de fiecare satelit pentru fiecare dintre cele N locații.\\ |
+ | |||
+ | Datorită distanței mult mai mari de la Pământ la sateliți, față de diferența de înălțime între sateliți, ei se pot considera în același plan (z1 = z2 = z3 = z). Între cele 3 sfere există așadar cel mult 2 puncte de intersecție, | ||
- | < | ||
- | <p> | ||
- | Vom considera ca fișier de intrare <i> coordonate.in </i>, în care pe prima linie vom avea un număr N care va reprezenta câte locații depistează sateliții noștri. </p> | ||
- | < | ||
- | Pe următoarele linii vom avea pentru fiecare locație: | ||
- | <ul> | ||
- | <li> nume locație </li> | ||
- | <li> coordonate (x1, y1, z) satelit1</ | ||
- | <li> raza R satelit1</ | ||
- | <li> coordonate (x2, y2, z) satelit2</ | ||
- | <li> raza R satelit2</ | ||
- | <li> coordonate (x3, y3, z) satelit3</ | ||
- | <li> raza R satelit3</ | ||
- | </ | ||
- | Considerăm același z, pentru că toți sateliții se consideră în același plan (la aceeași altitudine)</ | ||
- | Coordonatele și raza se consideră date de fiecare satelit pentru fiecare dintre cele N locații. </br> | ||
- | Având aceste 3 seturi de coordonate, trebuie să aflați coordonata (xi, yi) a locației respective. Se consideră prima coordonată calculată, locul din care plecăm.</ | ||
- | < | ||
- | Știind coordonatele tuturor locațiilor, | ||
- | <p> | ||
- | Vom primi un update printr-un fișier < | ||
- | </p> | ||
- | <h2> | + | <note important> |
- | <p> | + | Pentru simplificarea modelului problemei, considerăm doar proiecțiile sferelor, și presupunem că acestea se vor intersecta doar într-un singur punct (cara va reprenzenta locația propriu-zisă) \\ \\ |
- | | + | Atenție: pentru a nu greși la calcule, se recomandă scrierea ecuațiilor celor 3 cercuri și aflarea coordonatelor unei locații prin calcularea punctului |
- | </ | + | </note> |
- | < | + | |
- | ./gps coordonate.in avarii.in nume_destinatie | + | |
- | </ | + | |
- | < | + | |
- | unde numele destinației reprezintă locația unde vrem să ajungem. </ | + | |
- | | + | |
- | </p> | + | |
- | <h2> | + | <note tip> |
- | <div class=" | + | Dacă cei 3 sateliţi sunt reprezentaţi cu cercurile C1(x1, y1, R1), C2(x2, y2, R2) şi C3(x3, y3, R3), atunci punctul |
- | < | + | |
- | <li class=" | + | |
- | <li class=" | + | |
- | <li class=" | + | |
- | <li class=" | + | |
- | <li class=" | + | |
- | </ | + | |
- | </ | + | |
+ | **(x-x1)< | ||
- | <h2>Referințe </h2> | + | **(x-x2)<sup>2</ |
- | <div class=" | + | |
- | <ul> | + | **(x-x3)< |
+ | </ | ||
+ | |||
+ | Se consideră prima coordonată calculată, locul din care plecăm. | ||
+ | |||
+ | Știind coordonatele tuturor locațiilor, vom considera costul de la o locație la cealaltă distanța dintre cele 2 puncte în plan. | ||
+ | |||
+ | <note tip> | ||
+ | Pentru punctele P1(x1, y1) şi P2(x2, y2) putem scrie ecuaţia distanţei: P1P2 = dist(P1,P2) = **sqrt( (x1-x2)< | ||
+ | </note> | ||
+ | |||
+ | Vom primi un update printr-un fișier // | ||
+ | |||
+ | ===== Cerințe ===== | ||
+ | |||
+ | Executabilul obținut în urma compilării va avea numele **// | ||
+ | |||
+ | <note tip> | ||
+ | **./gps coordonate.in avarii.in nume_destinatie coord_finale.out rezultat.out ** | ||
+ | </ | ||
+ | unde numele destinației reprezintă locația unde vrem să ajungem pornind din nodul pe care am zis că-l vom considera nod de plecare. | ||
+ | |||
+ | În fișierul coord_finale.out se vor scrie numele și perechea (x,y) de coordonate calculate pentru fiecare locație, în ordinea citirii lor din fișierul de intrare coordonate.in | ||
+ | |||
+ | Având toate aceste date, vrem să calculăm **costul** celui mai scurt drum de la nodul de plecare, la cel destinație, | ||
+ | |||
+ | ===== Exemplu (date fictive momentan, nu e test real!!)===== | ||
+ | ^ coordonate.in ^ | ||
+ | |8 |Loctie8 Locatie5 |19 17 | ||
+ | |Locatie1 | ||
+ | |Satelit0 51 41 40 |Loctie3 Locatie1 |0 6 | ||
+ | |Satelit1 54 5 37 | ||
+ | |Satelit2 376 93 365 | |13 10 | ||
+ | | | ||
+ | |Locatie2 | ||
+ | |Satelit0 158 65 148 | |18 15 | ||
+ | |Satelit1 51 561 545 | | ||
+ | |Satelit1 51 561 545 | | ||
+ | | | ||
+ | |Locatie3 | ||
+ | |Satelit0 289 6 289 | ||
+ | |Satelit1 264 176 314 | | ||
+ | |Satelit2 217 462 505 | | ||
+ | | | | ||
+ | |Locatie4 | ||
+ | |Satelit0 9 31 25 | ||
+ | |Satelit1 16 39 32 | | ||
+ | |Satelit2 208 263 320 | | ||
+ | | | ||
+ | |Locatie5 | ||
+ | |Satelit0 205 66 200 | | ||
+ | |Satelit1 76 26 65 | | ||
+ | |Satelit2 266 214 325 | | ||
+ | | | ||
+ | |Locatie6 | | ||
+ | |Satelit0 322 285 410| | ||
+ | |Satelit1 82 173 170| | ||
+ | |Satelit2 175 551 557| | ||
+ | | | ||
+ | |Locatie7| | ||
+ | |Satelit0 53 3 36| | ||
+ | |Satelit1 137 25 122| | ||
+ | |Satelit2 52 615 613| | ||
+ | | | ||
+ | |Locatie8| | ||
+ | |Satelit0 70 351 340| | ||
+ | |Satelit1 379 15 361| | ||
+ | |Satelit2 87 275 269| | ||
+ | |||
+ | ===== Reguli pentru trimitere ===== | ||
+ | |||
+ | - Arhiva temei va avea numele // | ||
+ | - Ea va conține (direct în rădăcină): | ||
+ | * fișierul main.c </ | ||
+ | * Makefile-ul (cu regulile make pentru executabilul **gps** și clean) | ||
+ | * fișierul README în care va fi descrisă soluția problemei | ||
+ | - Dacă veți calcula coordonatele spațiale pentru toate locațiile (adică fișierul de ieșire coord_finale.out e integral corect pentru un test), se poate obține punctaj parțial de **50p** | ||
+ | - Dacă soluția voastră nu compilează, | ||
+ | - | ||
+ | |||
+ | ===== Referințe ===== | ||
+ | <html> | ||
< | < | ||
< | < | ||
- | </ul> | ||
- | </ | ||
</ | </ | ||