Funkcja statyczna - okrąg

0

Cześć.
Moglibyście rzucić okiem na ten kod:
http://4programmers.net/Pastebin/1341
http://4programmers.net/Pastebin/1343

W szczególności na tę funkcję statyczną. Jakoś mi się nie podoba

0

No nie za ładna, po jej nazwie nie idzie wywnioskować co robi...

0

Sorki :)
Sprawdza, czy dla podanych punktów a,b,c istnieje okrąg i wyznacza jego środek oraz promień.

0

istnieje okrąg, który przecina te 3 punkty? poza tym co mamy Ci powiedzieć skoro nie zadałeś pytania...?

0

(2;0)
(0;2)
(-2;0)

Czyli funkcja zwróci true, i ustawi wartości we wskazanym okręgu na środek (0,0) i promień 2

Nie powiedziałem, że funkcja nie działa, po prostu nie podoba mi się sposób jej wykonania i pytam co by można w niej zmienić, by kod lepiej wyglądał. Może jestem przewrażliwiony.

0
106	    if (B != B || A != A)
107	        return false;

WTF?
poza tym funckja zwraca false tylko w przypadku gdy ktores dw apunkty sa takie same, wiec ten warunek powinienes sprawdzic na poczatku.

dodałbym jeszcze jedną metodę (bez static)

bool CzyIstnieje(Punkt &a, Punkt &b, Punkt &c) {return CzyIstnieje(a,b,c,this);}
0
106            if (B != B || A != A)
107                return false;

Chodzi o dzielenie przez 0.
Jeżeli dam

int i = 1/0;

to wartością będzie NAN, a jak dzielimy przez 0 to wartość nie istnieje. Czyli i != i zwróci true

2

Matematyka się kłania. Na każdym trójkącie można opisać okrąg, więc jeśli podane punkty nie są współliniowe zawsze istnieje taki okrąg, który przechodzi przez 3 punkty.
Najprościej wyznaczyć dwa wektory i policzyć czy ich iloczyn wektorowy jest równy zero (oczywiście z pewną tolerancją numeryczną).
Od strony informatycznej też bieda, zła nazwa, niezrozumiałe przeciążenie.
Ja bym stworzył metodę statyczna dla Punkt i nazwał ją: bool Punkt::czyWspolliniowe(const Punkt &a, const Punkt &b, const Punkt &c);
Na dodatek chyba widać, że takie krzaki źle się czyta (poprawia). Za dużo obliczeń w jednej instrukcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1