Autor | Zpráva | ||
---|---|---|---|
BlueShadow Profil |
#1 · Zasláno: 17. 6. 2009, 22:17:01 · Upravil/a: BlueShadow
Ahojte,
robím jednu kalkulačku pre tra*ian, ktorá vypočíta rýchlosť presunu zo súradníc A na súradnice B, využíva sa pritom pytagorova veta, a narazil som na jeden problémik, pokiaľ sú súradnice rovné, teda netreba ísť šikmo, tak to vypočíta dobrý čas, rovnaký ako tra*ian, ale pokiaľ zvolím súradnice, na ktoré treba ísť šikmo, tak mi to vyhodí o 1s menší čas ako vyhodí tra*ian, skript je tu: <?php $BodAX = 58; $BodBX = 57; $BodAY = 31; $BodBY = 33; $tmp = pow(abs($BodAX - $BodBX), 2) + pow(abs($BodAY - $BodBY), 2); $Celkova_Vzdalenost = sqrt($tmp); echo "Celkova vzdalenost: "; printf($Celkova_Vzdalenost); $dobaGa = ($Celkova_Vzdalenost / 12 ); $casGa = ($dobaGa * 60 * 60); echo "Doba chuze: "; echo Date("H:i:s", $casGa); echo "Gal prijde v "; // Promenná z aktuálním casem $Aktualni_cas = Time(); // Cesta $Doba_min_cestyGa = $casGa; $Doba_sec_cestyGa = $Doba_min_cestyGa; $PrichodGa = $Aktualni_cas+$Doba_sec_cestyGa; echo Date("H:i:s", $PrichodGa); echo "<p> "; echo Date("H:i:s", $Aktualni_cas) ?> Má to tam ísť 11:11 podľa tra*ian, ale nech robím čo robím skript stále hádže 11:10, potrebujem aby to bolo 100%. Nejaké nápady kde môže byť chyba? Môj skromný odhad že niekde v zaokruhľovaní, ale netuším kde. Ďakujem za každú pomoc. BS |
||
nightfish Profil |
#2 · Zasláno: 17. 6. 2009, 22:58:21
pravděpodobně
$casGa = ceil(60*60*$dobaGa); |
||
BlueShadow Profil |
#3 · Zasláno: 18. 6. 2009, 13:13:52
díky moc už to ráta presne ako tra*ian :)
Ale mal by som ešte jednu otázku, teraz mi pod Gal prijde v: xx:xx:xx zráta aktuálny čas s časom cesty, ale ja, by som potreboval nahradiť aktuálny čas, časom ktorý sám napíšem vo formulári, takže vo formulári napíšem napr. 14:00:00 odošlem, a pokiaľ je cesta 11:11, skript vyhodí že Gal prijde v 14:11:11. Dúfam že ste pochopili, skúšal som to, lenže mi to hádzalo chyby, a keď nehodilo, tak vyšiel totálny blud. Tu je skript: <?php //skontrolujeme ci uz formular nebol odoslany if (empty ($_REQUEST)) { ?> <html> <form method="get" action="/index.php"> Suradnice: X <input type="text" name="AX" size=1 > Y <input type="text" name="AY" size=1 > Suradnice 2: X <input type="text" name="BX" size=1 > Y <input type="text" name="BY" size=1 > <input type="Submit" name="odoslat"> </form> </html> <?php } else { //pytagorova veta $tmp = pow(abs($_REQUEST["AX"] - $_REQUEST["BX"]), 2) + pow(abs($_REQUEST["AY"] - $_REQUEST["BY"]), 2); $distance = sqrt($tmp); //celkova vzdialenost policok echo "Celkova vzdalenost: "; printf($distance); //vzdialenost preratavame na cas $timesec = ($distance / 12 ); $time = ceil(60*60*$timesec); echo "Doba chuze: "; echo Date("H:i:s", $time); //spocitame cas cesty s aktualnym casom echo "Gal prijde v "; //premenna s aktualnym casom $current_time = Time(); $min_travel_time = $time; $travel_time_sec = $min_travel_time; $totaltime = $current_time+$travel_time_sec; echo Date("H:i:s", $totaltime); echo "<p> "; //aktualny cas zobrazeny echo Date("H:i:s", $current_time); echo "<a href='/index.php'> Go back </a>"; } ?> Ďakujem za pomoc! |
||
nightfish Profil |
#4 · Zasláno: 18. 6. 2009, 13:22:48
místo Time() použij mktime()
|
||
BlueShadow Profil |
#5 · Zasláno: 18. 6. 2009, 13:28:18
fúú a nejaký návod k tomu? Pozrel som na PHP.net ale nejako nechápem.
<?php //skontrolujeme ci uz formular nebol odoslany if (empty ($_REQUEST)) { ?> <html> <form method="get" action="/index.php"> Suradnice: X <input type="text" name="AX" size=1 > Y <input type="text" name="AY" size=1 > Suradnice 2: X <input type="text" name="BX" size=1 > Y <input type="text" name="BY" size=1 > Cas prichodu <input type="text" name="time" size=1 > <input type="Submit" name="odoslat"> </form> </html> <?php } else { //pytagorova veta $tmp = pow(abs($_REQUEST["AX"] - $_REQUEST["BX"]), 2) + pow(abs($_REQUEST["AY"] - $_REQUEST["BY"]), 2); $distance = sqrt($tmp); //celkova vzdialenost policok echo "Celkova vzdalenost: "; printf($distance); //vzdialenost preratavame na cas $timesec = ($distance / 12 ); $time = ceil(60*60*$timesec); echo "Doba chuze: "; echo Date("H:i:s", $time); //spocitame cas cesty s aktualnym casom echo "Gal prijde v "; //premenna s aktualnym casom $current_time = mktime($_REQUEST["time"]); $min_travel_time = $time; $travel_time_sec = $min_travel_time; $totaltime = $current_time+$travel_time_sec; echo Date("H:i:s", $totaltime); echo "<p> "; //aktualny cas zobrazeny echo Date("H:i:s", $current_time); echo "<a href='/index.php'> Go back </a>"; } ?> Takto to hodí error: Notice: A non well formed numeric value encountered in C:\Program Files\EasyPHP 3.0\www\index.php on line 41 Do inputu som zadal 14:00:00. |
||
tiso Profil |
#6 · Zasláno: 18. 6. 2009, 13:34:29
BlueShadow - návod použitia (examples) tam je, prejdi si aj komentáre.
|
||
BlueShadow Profil |
#7 · Zasláno: 18. 6. 2009, 13:43:35
Prešiel som len tie prvé a keď som videl aké zacyklené je to, tak som už ďaľšie nepozeral, ale keď som pozrel znovu tak dole bol jeden ktorý pomohol, dík.
Už funguje výborne. |
||
BlueShadow Profil |
#8 · Zasláno: 18. 6. 2009, 16:08:21
Ok, mám ďaľší problém, teraz ráta všetko výborne, ani chyby nehádže, ale neviem prečo, po odoslaní, to vyhodí správnu dlžku polí, vyhodí správny výsledok čas cesty + zadaný čas príchodu, ale dobu cesty to priráta hodinu, teda keď je doba cesty čojaviem 10min, tak echo doba cesty ukáže 01:10:00, keď som to nahodil na hosting, tak tam zase pridáva 18 hodín, a vyhodí 18:10:00, ako celkový výsledok je správny, keď má zrátať čas príchodu tak to priráta len 10min, a nie aj tie hodiny, nevie niekto ako to opraviť?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <?php //skontrolujeme ci uz formular nebol odoslany if (empty ($_REQUEST)) { ?> <table> <form method="get" action="/index.php"> <tr><td>Tvoje súradnice:</td></tr> <tr><td>X<input type="text" name="AX" size=1 ></td></tr> <tr><td>Y<input type="text" name="AY" size=1 ></td></tr> </table> <br> <table> <tr><td>Útočníkové súradnice:</td></tr> <tr><td>X<input type="text" name="BX" size=1 ></td></tr> <tr><td>Y<input type="text" name="BY" size=1 ></td></tr> </table> <br> <table> <tr><td>Čas príchodu útoku:</td></tr> </table> <table> <tr><td>hodina<input type="text" name="hours" size=1 ></td> <td>minúta<input type="text" name="minutes" size=1 ></td> <td>sekunda<input type="text" name="seconds" size=1 ></td></tr> </table> <br> <table> <tr><td><input type="Submit" name="odoslat"></td></tr> </form> </table> <?php } else { //pytagorova veta $tmp = pow(abs($_REQUEST["AX"] - $_REQUEST["BX"]), 2) + pow(abs($_REQUEST["AY"] - $_REQUEST["BY"]), 2); $distance = sqrt($tmp); $distance_for_echo = round($distance, 2); //celkova vzdialenost policok echo "<table><tr><td>Celková vzdalenosť:</td><td> $distance_for_echo polí </td></tr></table>"; //vzdialenost preratavame na cas $timesec = ($distance / 12 ); $time = ceil(60*60*$timesec); echo "<table><tr><td>Doba cesty:</td><td>" .Date("H:i:s", $time). "</td></tr></table>"; //premenna ktora vytiahne cas zadany vo formulari $current_time = mktime($_REQUEST["hours"],$_REQUEST["minutes"],$_REQUEST["seconds"],0,0,0); //spocitame cas cesty s aktualnym casom $min_travel_time = $time; $travel_time_sec = $min_travel_time; $totaltime = $current_time+$travel_time_sec; echo "<table><tr><td>Návrat útočníkových jednotiek:</td><td>".Date("H:i:s", $totaltime)."</td></tr></table><br><br><br>"; //aktualny cas zobrazeny echo "<table><tr><td>Aktuálny čas:</td><td>".Date("H:i:s", $current_time)."</td></tr></table><br>"; //navrat na index echo "<a href='/index.php'> <<< Go back </a>"; } ?> </body> </html> Online skript je tu: http://tools.divsveta.eu/index.php |
||
BlueShadow Profil |
#9 · Zasláno: 18. 6. 2009, 19:56:29
Hm nikto nevie čím nahradiť tú funkciu Date aby si nedosadzovala serverový čas keď neni hodina vyplnená? Teda keď je cesta čojaviem 11min 11s tak si to dosadí namiesto hodín serverový čas, a ostatné normálne podľa výstupu vyplní. Neviem ako to oblbnúť, skúsil by som niečo s funkciou if, ak je viac ako 3600sekúnd ten výstup $time tak nič nerobiť, a keď je pod, tak dať namiesto hodiny 00. Ale neviem jak na to. Alebo nejaká iná funkcia ktorá vie premeniť sekundy na formát HH:MM:SS ?
Díky |
||
Časová prodleva: 4 dny
|
|||
tiso Profil |
#10 · Zasláno: 22. 6. 2009, 19:54:10
BlueShadow - čo presne znamená „keď neni hodina vyplnená“?
|
||
fajzen Profil |
#11 · Zasláno: 22. 6. 2009, 19:55:34 · Upravil/a: fajzen
// EDIT: sorry, zle som si prečítal otázku
nerozumiem zápisu $min_travel_time = $time; $travel_time_sec = $min_travel_time; $totaltime = $current_time+$travel_time_sec; nebolo by jednoduchšie len $totaltime = $current_time+$time; |
||
BlueShadow Profil |
#12 · Zasláno: 23. 6. 2009, 08:37:51
@Tiso:
ukazuje to vždy čas vo formáte HH:MM:SS, takže 00:00:00, a keď je napríklad cesta 11min 11sec, tak by to malo ukázať takto: 00:11:11, ale to sa práveže nestane, keď je hodina nula, teda cesta trvá menej ako hodinu, tak to namiesto tej mojej cielenej 00:11:11 ukáže pravdepodobne serverovú hodinu, na hentom americkom hostingu to ukáže 18:11:11, u mňa na localhoste to ukáže 01:11:11 a neviem prísť nato kde je chyba. Funkciu som hľadal, prekopal som trochu php.net a funkcie s časom, ale je to obtiažne s mojou angličtinou nájsť niečo čo by mi fungovalo, na tento problém. Dúfam že som vysvetlil podrobne problém. @fajzen: áno máš pravdu, tá premenná je pozostatok z nejakého pokusu ten čas spraviť, predtým než som to sem postol. |
||
tiso Profil |
#13 · Zasláno: 23. 6. 2009, 09:52:11
BlueShadow - keď si na riadok 60 doplníš miesto tých núl aktuálny mesiac, deň a rok, tak to funguje?
$current_time = mktime($_REQUEST["hours"],$_REQUEST["minutes"],$_REQUEST["seconds"],0,0,0);//myslim tieto nuly A som tiso! |
||
BlueShadow Profil |
#14 · Zasláno: 23. 6. 2009, 11:28:06 · Upravil/a: BlueShadow
Nefunguje :( Stále to isté, na localhoste tam hádže 1tku, na hostingu 18tku na miesto hodín. Ono to v celkovom výsledku ráta ten čas dobre, keď sa zrátava s aktuálnym časom, len na to echo to nejako blbne :( Neexistuje nejaká iná funkcia čo prepíše sekundy do formátu HH:MM:SS ?
btw: prepáč, som myslel že ako Dr. Jozef Tiso :)) |
||
tiso Profil |
#15 · Zasláno: 23. 6. 2009, 11:40:58
BlueShadow - v podstate si ju môžeš spraviť sám, deliť 60-timi a pracovať so zvyškom hádam vieš...
|
||
BlueShadow Profil |
#16 · Zasláno: 23. 6. 2009, 12:16:12 · Upravil/a: BlueShadow
Hm nejako ma nenapadá ako to presne urobiť, kódovo, teda s tým zvyškom konkrétne, nemohol by si ten kus kódu nakódiť? Ja už som z toho de-bil.
|
||
Časová prodleva: 15 let
|
0