In primul rand nu trebuie sa te gandesti la "aria cu determinanti" ci trebuie sa te gandesti la arie...
Ca sa fiu mai explicit trebuie sa te gandesti la produs vectorial. A X B ( A si B -> vectori ) ... A(xa,ya) B(xb,yb)
ai asa :
A X B = |A| * |B| * sin(alpha ) // unde alpha este unghiul dintre cei doi vectori (A,B) . ( e bine de sa desenezi ca o sa fie intuitiv )
produsul vectorial nu este comutativ : A X B != B X B deoarece A X B = |A|*|B|*sin(A,B) si B X A = |B| * |A| * sin( B , A) => |A| * |B| * sin(A,B ) = - |B|*|A|*sin(B,A) // doarece functia sin este functie inpara adica sin( - alpha ) = - sin(alpha) .
|A| = modulul vectorului , adica lungimea vectorului, adica sqrt(A.x*A.x + B.y*B.y)
Daca scriem vectorii A si B ca sume de vectori pe cele doua axe si facem produsul vectorial ajungem la :
A(xa,ya) * B(xb,yb) * sin(alpha) = xa * xb * sin(xa,xb) + xa * yb * sin(xa , yb ) + ya * xb * sin(ya, xb) + ya * yb * sin(ya,yb)
sin( 0 ) = 0
sin (90 grade ) = 1
sin(-90 grade ) = -1
rezulta
xa * xb * sin(xa,xb) = 0
ya * yb * sin(ya,yb) = 0
xa * yb * sin(xa , yb ) = xa * yb;
ya * xb * sin(ya, xb) = - ya * xb;
de unde rezulta ca expresia este :
A * B * sin(alpha) = xa * yb - ya * xb ; // vestitul determinant
care calculeaza aria paralelogramului format de adunarea vectorilor A si B . Daca vrei aria triunghiul ... trebuie sa imparti la 2.
Aria unui triunghi este baza * inalatimea /2 . Baza o poti considera un vectori si inaltimea este celalalta vector * sinus( alpha) . de unde rezulta ca produsul vectorial / 2 este aria triunghiului dintre cei doi vectori.
Daca nu iti este clara de unde vine faptul ca este aria ... iti pot arata mai clar . Gasesti foarte frumos explicat in Cormen la capitolul de geometrie computationala toate chestiile astea si daca sti sa lucrezi un pic cu vectori nu e greu deloc.
A se observa ca daca ai o intoarcere in sens trigonometric aria este pozitiva daca ai intoarcere in sens invers trigonemetric atunci aria este negativa ( din cauza sinusului care are unghi negativ ... ) chestia asta te poate ajuta sa vezi cum este un punct fata de o drepta. Daca ai arie pozitiva este "deasupra" .. daca ai arie negativa este "sub dreapta". [ faci produs vectorial dintre vectorii determinati de doua puncte care se gasesc pe drepta si un punct dintre cele doua si punctul exterior ]. Daca aria e 0 atunci punctul este pe drepta.
// sper sa nu fi gresit vre-un indice
Despre ecuatia dreptei :
Orice drepta poate fi determinata de un punct si o panta, de doua puncte, de un punct si un vectori...
Consideram ca avem un punct fixat A(x0,y0) o panta fixata "m" si un punct B(x,y) care se plimba pe drepta. atunci panta dreptei este :
m = (y - y0) / ( x - x0) care este si tangenta daca desenezi si vezi triunghiul.
se poate scrie si asa :
(x - x0)* m = (y - y0)
daca desfacem ajungem la :
x*m - y + y0 - x0*m = 0;
Forma generala a ecuatiei dreptei este : A*X + B*Y + C = 0; de unde rezulta ca m = A , -1 = B si y0 - x0*m = C
Pentru cazul in care ai ecuatia dreptei determinata de doua puncte fixate : A(x0,y0) si B(x1,y1) avem :
m = (x0 - x1) / (y0 - y1) // panta ecuatiei.
Avem panta si un punct problema se reduce la explicatia deasupra.
Ai un vecor V(x,y) si pun punct P care fiseaza vectorul. Calculeazi x/y ( panta vectorului , adica panta dreptei tale ) si ajungi in cazul 1 adica ai panta si un punct.
Referitor la chestia cu int vs. float. In primul rand cand ai impartire la 2 rezultatul se termina in .0 sau in .5 deci nu trebuie sa iti faci griji pentru precizie. Daca in problema trebuie sa faci comparatii intre doua produse vectoriale ... evident daca a < b => a / 2 < b/2
.
Frumusetea produsului vectorial este data de faptul ca daca ai puncte de coordonare numere intregi rezultatul se termina in .0 sau in 0.5 ( aria ) .