racel45 [ Generaďż˝ ]
Obliczanie pola trójkąta gdy dane są współrzędne wierzchołków (turbo pas...
Otóż mam zadanie domowe i muszę napisać program który to obliczy, ze wzoru podanego na kartce coś nie idzie (p:=1/2*|(x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3+y1-x1*y3)|).
Znalazłem jeszcze w internecie inny (p:=1/2*|(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)|).
We wzorze przed i po nawiasach są dodatkowo takie proste nawiasy |, ale nie wiem jak zrobić je w turbo pascalu, więc zapisałem to tak:
p:=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);
p:=1/2*p;
No i dobrze liczy, tylko znak jest zły...
(to wyliczył -7,5)
Co jest nie tak ? Pewnie chodzi o te proste nawiasy, ale nie wiem jak je uzyskać w TP.
Finthos [ Generaďż˝ ]
Korzystasz ze wzoru Herona, który oblicza pole trójkąta z długości jego boków. Te pionowe nawiasy to wartość bezwzględna. Albo znajdź odpowiednią funkcję pascala( abs?) albo na końcu użyj ifa:
if p<0 then p:=-p.
racel45 [ Generaďż˝ ]
No tak, abs pomógł, dzięki :)
Czyli ten pierwszy wzór jest zły ? To mam źle wydrukowane wtedy :P Ale drugi działa.
DEXiu [ Senator ]
Gdybyś się chwilę zastanowił to wiedziałbyś co jest nie tak z pierwszym wzorem. W trzecim nawiasie zamiast x3+y1 powinno być x3*y1 i wtedy oba te wzory będą dokładnie tożsame. Nawet przepisując wzór z kartki czasem dobrze jest pomyśleć.
Finthos ==> To nie wzór Herona, tylko wzór na pole trójkąta z wyznacznika wektorów rozpinających go ;) Ale to tylko szczegół w ramach ciekawostki - nie żebym się złośliwie czepiał.