Calcolo Fase Lunare.
Calcolo Fase Lunare. postato il 04/04/2011 17:12:48 nel forum programmazione, open source e hosting
Qualcuno hai idea di che formula si usi per calcolare la fase lunare ? Ovviamente avete capito a che mi serve ^^. Ho dato un occhiata a gdr cd ma non capisco dove venga calcolata.
Grazie a chi risponderà^^
Pagine → 1
04/04/2011 17:21:21
staff_nb ha scritto: Ecco qui ^^
https://www.gdr-online.com/download_dettaglio.asp?id=81 ↗
Può aiutarti alla comprensione del meccanismo questo pacchetto per gdrcd in versione 3.0
Guardo subito ;)
04/04/2011 17:26:13 e modificato da giru il 04/04/2011 17:28:26
ma la time() in php restituisce un valore che in ASP non posso ottenere con le funzioni native giusto ?
Qualche idea ?
Posso eventualmente optare per una soluzione del genere ?
datediff("s", "01/01/1970 00:00:00", now())
La strtotime cosa fa ? COme potrei fare in ASP ?
04/04/2011 17:54:47
E' la semplice risoluzione di un problema, la prima cosa che occorrono sono i dati.
Sappiamo che:
- Ogni ciclo lunare è composto da 8 fasi
- Ogni ciclo lunare ha la durata di 29 giorni e 12h (29 giorni e mezzo insomma, non ci interessa essere più pignoli di così).
(fonte http://it.wikipedia.org/wiki/Fasi_lunari ↗)
La domanda è, come far si che queste fasi varino ogni ciclo lunare ottavi di tempo ?
Innanzitutto ci calcoliamo il tempo in secondi di un ottavo di ciclo lunare, dando per scontata una visione idealistica e non reale ;)
$ottavoDiCiclo = 86400 * (29,5/8);
Nota Bene:
- 86400 è il risultato della logica operazione 60*60*24 che costituiscono i secondi di una giornata.
- 29,5 è il tempo di durata di un ciclo lunare, a noi interessa un semplice ottavo per cui divido per 8.
Ora ci occorre un riferimento temporale fisso. Se ragioniamo in termini di programmazione, php ci offre una semplice funzione, il time() http://www.php.net/time ↗ che è un calcolo in secondi dal 1970.
Adesso che abbiamo questo riferimento fisso possiamo dividerlo per l'ottavo di ciclo calcolato precedentemente:
$fasiTrascorse = time()/$ottavoDiCiclo;
Perchè questa divisione ? Perchè ci restituirà il numero di volte che si è ripetuto un ottavo lunare dal tempo iniziale del time(). Per ogni periodo $ottavoDiCiclo passato, il numero risultante da questa divisione incrementerà di uno.
Adesso che abbiamo un valore numerico bello e semplice che incrementa in automatico di uno ogni volta che passa un periodo equivalente a $ottavoDiCiclo basta semplicemente raccogliere il resto di una divisione per otto:
$faseAttuale = $fasiTrascorse%8;
Per ottenere una variazione numerica costituita da 8 elementi che va da 0 a 7 e che varia ogni $ottavoDiCiclo.
Vogliamo essere pignoli perchè lo 0 non ci piace ? Basta prendere il risultato finale e sommarci 1 per avere una variazione da 1 a 8.
Non mi sono dilungato nell'esplicazione dei calcoli elementari eseguiti concentrandomi sul problema in se, spero sia comprensibile ;-)
04/04/2011 17:57:10
giru ha scritto: ma la time() in php restituisce un valore che in ASP non posso ottenere con le funzioni native giusto ?
Qualche idea ?
Posso eventualmente optare per una soluzione del genere ?
datediff("s", "01/01/1970 00:00:00", now())
La strtotime cosa fa ? COme potrei fare in ASP ?
In asp puoi ottenere l'equivalente del time così se non ricordo male:
timestamp(now())
04/04/2011 17:59:09
blancks ha scritto: E' la semplice risoluzione di un problema, la prima cosa che occorrono sono i dati.
Sappiamo che:
- Ogni ciclo lunare è composto da 8 fasi
- Ogni ciclo lunare ha la durata di 29 giorni e 12h (29 giorni e mezzo insomma, non ci interessa essere più pignoli di così).
(fonte http://it.wikipedia.org/wiki/Fasi_lunari ↗)
La domanda è, come far si che queste fasi varino ogni ciclo lunare ottavi di tempo ?
Innanzitutto ci calcoliamo il tempo in secondi di un ottavo di ciclo lunare, dando per scontata una visione idealistica e non reale ;)
$ottavoDiCiclo = 86400 * (29,5/8);
Nota Bene:
- 86400 è il risultato della logica operazione 60*60*24 che costituiscono i secondi di una giornata.
- 29,5 è il tempo di durata di un ciclo lunare, a noi interessa un semplice ottavo per cui divido per 8.
Ora ci occorre un riferimento temporale fisso. Se ragioniamo in termini di programmazione, php ci offre una semplice funzione, il time() http://www.php.net/time ↗ che è un calcolo in secondi dal 1970.
Adesso che abbiamo questo riferimento fisso possiamo dividerlo per l'ottavo di ciclo calcolato precedentemente:
$fasiTrascorse = time()/$ottavoDiCiclo;
Perchè questa divisione ? Perchè ci restituirà il numero di volte che si è ripetuto un ottavo lunare dal tempo iniziale del time(). Per ogni periodo $ottavoDiCiclo passato, il numero risultante da questa divisione incrementerà di uno.
Adesso che abbiamo un valore numerico bello e semplice che incrementa in automatico di uno ogni volta che passa un periodo equivalente a $ottavoDiCiclo basta semplicemente raccogliere il resto di una divisione per otto:
$faseAttuale = $fasiTrascorse%8;
Per ottenere una variazione numerica costituita da 8 elementi che va da 0 a 7 e che varia ogni $ottavoDiCiclo.
Vogliamo essere pignoli perchè lo 0 non ci piace ? Basta prendere il risultato finale e sommarci 1 per avere una variazione da 1 a 8.
Non mi sono dilungato nell'esplicazione dei calcoli elementari eseguiti concentrandomi sul problema in se, spero sia comprensibile ;-)
Ti ringrazio, ma volevo solo sapere se la time() in asp potevo sostituirla con datediff("s", "01/01/1970 00:00:00", now())
04/04/2011 18:00:34
blancks ha scritto: [quote]giru ha scritto: ma la time() in php restituisce un valore che in ASP non posso ottenere con le funzioni native giusto ?
Qualche idea ?
Posso eventualmente optare per una soluzione del genere ?
datediff("s", "01/01/1970 00:00:00", now())
La strtotime cosa fa ? COme potrei fare in ASP ?
In asp puoi ottenere l'equivalente del time così se non ricordo male:
timestamp(now())
[/quote]No :P
Errore di run-time di Microsoft VBScript error '800a000d'
Tipo non corrispondente: 'timestamp'
/gdr_land/amministrazione/Default.asp, riga 48
04/04/2011 18:01:36 e modificato da blancks il 04/04/2011 18:02:31
Leggendo solo la prima domanda..
giru ha scritto: Qualcuno hai idea di che formula si usi per calcolare la fase lunare ?
..non avevo inteso :)
edit: ok ricordavo male xD
04/04/2011 18:05:48 e modificato da giru il 04/04/2011 18:08:18
Quindi dovrebbe poter funzionare cosi:
ottaviDiCiclo = 86400 * (29.5/8)
fasiTrascorse = ((datediff("s", "01/01/1970 00:00:00", now()))/ottaviDiCiclo)
faseAttuale = fasiTrascorse mod 8
e poi il ciclo select case.
Che ne dite ?
Oggi esce 6 --> Luna crescente... ho controllato ed è giusto ^^ Grazie a tutti. Ho scritto la soluzione se qualcuno ha lo stesso problema ^^
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tibia ↗
Neverness to Everness ↗
Raja Dunia ↗
RAID Shadow Legends ↗
Fallen Gods ↗
Crossout ↗