Pytagorova veta – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pytagorova veta – PHP – Fórum – Programujte.comPytagorova veta – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
29. 6. 2009   #1
-
0
-

Ahojte,

robil som jednu kalkulačku na výpočet času cesty zo súradníc X do súradníc Y, riešené je to cez pytagorovú vetu, takže to ráta dobre, je to kalkulačka pre travian, a teraz príde na radu ten problém, táto moja kalkulačka si myslí že mapa travianu je plochá, teda zo súradníc 400/400 do -400/-400 je cesta 1100 políčok, teda to vypočíta táto kalkulačka, ale travian mapa má tvar torusu ( wiki: http://en.wikipedia.org/wiki/Torus , teda to čo hojne pojedá Homer Simpson :) ) a zo súradníc 400/400 do -400/400 je to v traviane len 1 políčko, teda potreboval by som nejaký vzorec, alebo rovno kus kódu nech predídem hlúpym otázkam, z mojej strany, ktorý by vylepšil tú pytagorovu vetu, tak aby to rátala správnepo súradnice 200/200 to ráta dobre, ale nad už to ráta zle. V Travian je rozmedzie súradníc 400/400 až 0/00 a 4 svetové strany takže -/+, +/+, +/- atď. Tu je môj skript:

Editoval hrach: zdrojak z duvodu zbytecnosti a prehlednosti smazan.

Neviem si s tým už rady :( Ako to urobiť aby to rátalo správne. Ešte pre vysvetlenie súradnice 400/400 a -400/-400 sú to isté ako 0/0 a -1/-1 teda vzdialenosťou.

Ďakujem za pomoc

Nahlásit jako SPAM
IP: 95.102.31.–
Reklama
Reklama
BlackShadow
~ Anonymní uživatel
5 příspěvků
15. 7. 2009   #2
-
0
-

Fakt nikto nevie, ako to urobiť? :(

Nahlásit jako SPAM
IP: 91.127.107.–
Spectator0
Věrný člen
15. 7. 2009   #3
-
0
-

Nekoukal jsem přímo do zdroje, ale napadlo mne, jestli bys to nemohl resit tak, ze tu vzdálenost budeš počítat nadvakrát. jednou tak jak to děláš, tak že vzdálenost z -400/-400 > 400/400 je ohromná a pak ještě jednou a to tak, že bys dopočítal vzdálenost do maxima třeba z 399/399 > 400/400 a pak k přičetl vzdálenost z -399/-399 . Porovnal vzdálenosti a vyhodil vysledek. nevim, zda je to použitelný, ale tak mě to napadlo jako první

Prostě rozloži ten toroid na čtyřuhelnik a a s tim pak pracovat

Nahlásit jako SPAM
IP: 82.150.166.–
. . .
Prog.0
Věrný člen
15. 7. 2009   #4
-
0
-

1. Riešiš matematický problém, asi tak úrovne 5. ročníka základnej školy
2. Možno by ti niekto poradil hneď, keby si sa opýtal jasnejšie a hlavne stručnejšie.
3. Ten priložený zdroják aj tak nik nebude čítať, keďže máš problém prísť na vzorec. Ak ho pochopíš, a stále si nebudeš vedieť poradiť s implementáciou, potom sa pýtaj na to.

Ak som správne pochopil, tak mapa je vlastne štvorec rozdelený na 800x800 políčok stočený do rúry a jej konce sú následne spojené.

ak je to tak, tak

najkratsia_vzd = [  (abs(ax - bx)  mod w)^2  + (abs(ay - by)  mod h)^2 )  ]^0.5;

w,h - rozmery mapy - sirka vyska
ax, ay - bod a
bx, by - bod b

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
nikto
~ Anonymní uživatel
24 příspěvků
15. 7. 2009   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 217.118.98.–
Prog.0
Věrný člen
16. 7. 2009   #6
-
0
-

Hlboko sa ospravedlnujem, zrejme by som si tu 5. triedu mal zopakovať.

Podstata je proste v tom, zistiť najprv minimálne vzdialenosti v smere x a smere y, myslieť pri tom na možnosť prejst okrajom, a až potom rátať pytagora.

Ok, v PHP by som to urobil asi takto:

function vzd($ax, $ay, $bx, $by, $w=800, $h=800)

{
$dx = abs($ax - $bx) % $w;
$dy = abs($ay - $by) % $h;

if ($dx > $w/2) $dx = $w - $dx;
if ($dy > $h/2) $dy = $h - $dy;

return sqrt( pow($dx, 2) + pow($dy, 2) );
}
to modulo slúži na stiahnutie do rozsahu 0 až w-1, a 0 až h-1 v prípade že sú body zadané mimo základných súradníc, napr 0, 800, 1600, 2400 je jeden a ten istý bod ak w (h) je 800.

ak dx > (w/2) tak to znamena, že "ísť cez okraj" je kratšie.


dufam že dobre :-)

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Prog.0
Věrný člen
16. 7. 2009   #7
-
0
-

To Black.Shadow :
Jo a teraz lepšie pozerám, píšeš že súradnice sú od -400 po 400, takže celková veľkosť mapy nie je 800 ale 801 políčok, ak sa nemýlim.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Obrácená věta — založil Tom

Pythagorova věta — založil blbka007

Theveninova věta — založil RePRO

Morseova Věta — založil Marek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý