To Prog. : A[0,0] B[750, 0], w=h=800; |AB| = ?
Spravna odpoved: 50; tvoj vzorec = sqrt[ (abs(750-0) mod 800)^2 + (abs(0-0) mod 800)^2] = 750
"1. Riešiš matematický problém, asi tak úrovne 5. ročníka základnej školy " - to je ten rocnik do ktoreho pojdes po prazdninach, vsak ? Nabuduce ked budes chcet dokazovat svoju genialitu, tak si riesenie skontroluj aspon pre zopar extremnych pipadov.
Ale k rieseniu:
A[ax, ay]; B[bx, by]
suradnice su cele cisla, takze vseetky delenia budu celociselne
|AB| = sqrt[(w/2 *abs(ax-bx)/(w/2) - abs(ax-bx)%(w/2)) ^ 2 + (h/2*abs(ay-by)/(h/2) - abs(ay-by)%(h/2)) ^ 2]
/ je celociselne delenie; % je modulo
Preco je to tak:
Najvacisa mozna vzdialenost medzi 2 bodmi v smere x (y) je w/2 (h/2), lenze obycajne modulo w/2 nestaci, lebo ak by boli napr body [0,0] a [w/2+1, 0] tak ti to vrati 1, co je zle. Preto je tam to celociselne delenie, ak je vzdialenost (v smere x alebo y) mensia ako w/2 (h/2) tak 1. clen je nula a zrata sa normalna vzdialenost v pravouhlych suradniciach
Ak je vacsa ako w/2 (h/2) tak sa odcita od tejto max. vzdialenosti - tj, pojdeme cez okraj.
Fu, dufam ze som sa nepomylil ;) A sry, dal by som aj zdrojak ale v php nerobim.