infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Sorin Rita din August 01, 2011, 21:24:06



Titlul: unghi maxim
Scris de: Sorin Rita din August 01, 2011, 21:24:06
Am 2 puncte A(x,y) si B(x',y') si o multime de puncte de coordonate intregi. Cum as putea sa determin cu care punct din multime cele 2  formeaza un unghi maxim ? Adica cum aleg un punct C a.i. unghiul BCA sa fie maxim ?


Titlul: Răspuns: unghi maxim
Scris de: Popescu Silviu din August 01, 2011, 23:19:29
Le parcurgi, si pentru fiecare punct P(xp,yp) faci pantele pentru dreptele AP si BA, m1 respectiv m2, apoi faci m= (m1 + m2)/(1-m1*m2). apoi pt unghi faci atan(m). Si iei maximul :D,

Sper ca te ajuta,

PS Sa-mi spui daca nu intelegi ceva


Titlul: Răspuns: unghi maxim
Scris de: Sorin Rita din August 01, 2011, 23:45:41
Multumesc. Dar cred ca ai vrut sa zici AP si BP :-?


EDIT : scrisesem eu aiurea ,trebuia BCA  :roll:.  Mersi inca o data  


Titlul: Răspuns: unghi maxim
Scris de: Cont de teste din August 02, 2011, 00:30:42
Cel mai simplu merge cu teorema cosinusului.
Cum stii coordonatele afli lungimile laturilor cu Th Pitagora si cosinusul unghiului cu Th cosinusului. In cazul in care vrei sa afli cel mai mare unghi sub 180o acesta va avea cosinusul minim, iar daca vrei pentru unghiurile mai mare de 180o acesta are cosinusul maxim.(pe [0,pi] cosinusul este strict descrescator).


O metoda mai grea ar fi cu cross product prin care putem afla sinusul. Dar nu este de ajuns deoarece sinusul nu este monoton pe [0, PI].
Deci trebuie sa aflam si daca unghiul trece in cadranul 2 sau nu.
Fie d' perpendicular pe dreapta AC in punctul B', B apartine d', daca B' apartine (AC) atunci masura unghiului este mai mica de pi/2, iar daca nu apartine este mai mare.
Pentru a afla daca B' apartine (AC) trebuie sa-i aflam coordonatele.
Scriem ecuatia dreptei AC si aflam panta. Cum d' perp. pe AC produsul pantelor este -1 => panta lui d' este (-1/(panta lui AC)).
Acum stim ca (y-yB)=panta(d')*(x-xB) si o putem rescrie sub forma ax+by+c=0.
Putem afla astfel coordonatele lui B' din cele 2 ecuatii pe care le verifica(ecuatia dreptei d' si a dreptei AC).
Pentru a afla daca B' apartine (AC) verificam daca coordonatele lui B sunt in interiorul celui mai mic dreptunghi determinat de A si C cu laturile paralele cu axele de coordonate. Daca apartine acestui dreptunghi atunci apartine si segmentului (AC).(segmentul AC este intersectia punctelor din interiorul dreptunghiului cu axa AC pe care B' se afla din ipoteza).


Sper ca am scris bine. Daca gasiti greseli va rog sa ma corectati.


Titlul: Răspuns: unghi maxim
Scris de: Sorin Rita din August 02, 2011, 18:00:42
Totusi metoda asta cu cross product mi se pare mai dificila. E mult mai usor cu pantele sau teorema cosinusului.


Titlul: Răspuns: unghi maxim
Scris de: Mihai Calancea din August 02, 2011, 18:07:38
http://cplusplus.com/reference/clibrary/cmath/atan2/


Titlul: Răspuns: unghi maxim
Scris de: Cont de teste din August 02, 2011, 18:21:30
Totusi metoda asta cu cross product mi se pare mai dificila. E mult mai usor cu pantele sau teorema cosinusului.
Da dar cross product e destul de folosit in probleme. Adica cu el poti afla ariile poligoanelor, poti sa afli daca 2 segmente se intersecteaza, poti sa afli infasuratoarea convexa si multe altele(vezi topcoder). Sa fiu sincer, e prima data cand folosesc teorema cosinusului la o problema de informatica.

Este buna si solutia cu tangenta unghiului format de cele 2 drepte! Poti aplica ce a zis Silviu si in cazul cand unghiul este ACB. Dar nu cred ca este nevoie sa calculezi arctangenta. Adica pe (0,pi/2) e pozitiva  si crescatoare iar pe (pi/2,pi) e negativa si crescatoare si la imagini egale ai argumente egale(in afara de 0 si pi) deci nu e nici o problema sa-ti dai seama daca unghiul x are masura mai mare ca unghiul y daca le stii tangentele.


Titlul: Răspuns: unghi maxim
Scris de: Sorin Rita din August 02, 2011, 18:28:13
@klamathix : Perfect !

@yonatan : Mda...trebuie sa ma pun la punct cu geometria  :weightlift: