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
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
No nie za ładna, po jej nazwie nie idzie wywnioskować co robi...
Sorki :)
Sprawdza, czy dla podanych punktów a,b,c istnieje okrąg i wyznacza jego środek oraz promień.
istnieje okrąg, który przecina te 3 punkty? poza tym co mamy Ci powiedzieć skoro nie zadałeś pytania...?
(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.
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);}
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
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.