Okej evo školskog primera kako se ovo, po mom mišljenju, rešava. Za unos sam izabrao tastaturu, što se rešava sa klasom Scanner.
Kod jednačine koja odlučuje da li tačka pripada kružnici bi moglo biti interesantno par stvari:
Code:
Math.abs(
Math.pow((ax-px),2) + Math.pow((ay-py),2)
- r*r
) < epsilon
Funkcija pow se konkretno ovde može zameniti sopstvenom funkcijom koja jednostavno kvadrira datu vrednost, ali neka ostane tako. Kod r nema potrebe zvati je.
Sledeća stvar je epsilon. Kako su gubitci preciznosti kod double mogući, uvek je poželjno ostaviti malo "lufta" po kome tražena vrednost može da varira. Evo primera koji će verovatno vratiti neočekivani false.
Code:
System.out.println(
(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1) == (1)
);
Zato se u okačenom fajlu računa vrednost razlike koja bi u idealnom slučaju trebala da bude nula, ali se jednakost prihvata kao zadovoljena i ako je razlika manja od unapred zadatog broja: epsilon. U slučaju odozgo bi to izgledalo ovako:
Code:
System.out.println(
Math.abs(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 - 1) < epsilon
);
Ovo bi već trebalo vraćati true.