Newsgroup: it.comp.lang.visual-basic
Titolo: Calcolo Fasi Lunari in Visual Basic

Vorrei fare un programmino in VB 5 che mostrasse le fasi lunari in base
alla data digitata.
C'è qualcuno che puo darmi una mano nella complilazione del codice?
Non so proprio dove iniziare.
C'è una "formula" che determina la fase in base al giorno ?
Grazie.
Renato

 Renato

 > Renato


Certo:
2451047 Mod 7 = 4 cioè Venerdì.
Anche l'operatore Mod lo trovi nell'help di VB5.
Per tua comodità, ti allego il listato VB5:
 g = 22
 m = 8
 a = 1998
 x = Int((m - 3) / 12)
 y = Int(((m - 2) - (x * 12)) * 30.59)
 jd = Int((a + x + 4712) * 365.25) + y + g + 29
 If jd >= 2299170 Then _
   jd = jd + 2 - Int(0.75 * Int((a + 100 + x) / 100))
 fase = jd / 29.53059 - 0.55904
 fase = fase - Int(fase)
 gds = jd Mod 7
Risultati:
jd = 2451048
fase = 0.74674461 (quasi luna nuova)
gds = 5 (Sabato; 0 = Lun, 6 = Dom)
Resto a disposizione.
Maurizio

Ciao Maurizio,
grazie ancora per le tue preziose informazioni. Finalmente il progetto è quasi
pronto.
Basta solo che gli abbino alcune immagini della fasi lunari poi è pronto.
Sono riuscito anche a non guardare il codice che mi hai gentilmente inviato; Dovevo
riuscirci da solo.
Comunque alla fine ho controllato i due codici, e l'unica differenza che ho notato
tra il mio ed il tuo,
a parte qualche INPUTBOX e MSGBOX che ho messo per digitare la data, era il calcolo
del Giorno Settimanale
gds = jd Mod 7
dove invece ho inserito questo codice
(txtDataGiorno = Format(DataCalc, "dddd") ' Visualizza il giorno della settimana).
C'è un motivo particolare perchè l'hai utilizzato oppure è lo stesso?
Come ben hai capito, in certe cose mi perdo in un bicchier d'acqua.
Pensa, è da due settimane che ho iniziato a programmare (per la prima volta in vita
mia) in Visual Basic, e per quanto cerchi di informarmi
con vari libri, alcune cose le memorizzi ed altre nemmeno sai di averle viste. Ho
capito comunque che un libro
anche se ha 650 pagine(Apogeo-VisualBasic5), non sarà mai in grado di visualizzare,
elencare o riassumere
tutte le possibilità, capacità e funzioni che VB5 nasconde dentro di se (e che solo
l'esperienza aiuta
a carpire).
Questa è la prima volta che mi avvicino a questo mondo seriamente. Sai, lavoro in un
negozio di
computer (vobis), e sento proprio il bisogno di capire che cosa vuol dire
programmare (almeno farmi un'idea).
Come quella cosa "INT" che non mi è passato nemmeno lontanamente per l'anticamera
del cervello
che fosse una funzione (bastava che guardassi sull'help).
Alcune piccole domande:
-*Visto che tu mi sembri un vero "esperto", hai qualche libro da consigliare di VB?
-*Queste formule astronomiche si possono trovare il qualche manuale?
-*Modificando leggermente il codice, si potrebbe digitare oltre alla data anche
l'ora (che poi verrebbe
calcolata anche su JD) ?
-*Hai qualche altra formula per uso astronomico da postarmi (tipo calcolo del
sorgere e tramonto del sole, della luna,
 calcolo delle eclissi, ecc.)?
Salutoni Renato P.
mroghy ha scritto:


...


Ciao Maurizio,
ho pensato di inviare il codice risultante come l'ho fatto io perchè certi conti non
tornano.
Non so se ho sbagliato io, ma controllando mi sembra tutto a posto.
Guardando i tuoi dati, l 'abbinamento delle fasi con le percentuali non corrisponde ai
valori reali.
Poi non riesco a capire come mai i giorni 1/8/98, 2/8/98, 30/8/98 e 31/8/98
mi riportano dei valori delle fasi errate.
Ti va di dare una controllata?
se fase è tra 0.00 e 0.24999: primo quarto
              tra 0.25 e 0.49999: luna piena
              tra 0.50 e 0.74999: ultimo quarto
              tra 0.75 e 0.99999: luna nuova
(tra parentesi è indicata la fase vera)
1/8/98 3.561
2/8/98 6.948
3/8/98 0.103
4/8/98 0.137
5/8/98 0.171
6/8/98 0.204
7/8/98 0.238
8/8/98 0.272 (luna piena)
9/8/98 0.306
10/8/98 0.340
11/8/98 0.374
12/8/98 0.408
13/8/98 0.441
14/8/98 0.475 (ultimo quarto)
15/8/98 0.509
16/8/98 0.543
17/8/98 0.577
18/8/98 0.611
19/8/98 0.645
20/8/98 0.679
21/8/98 0.712
22/8/98 0.746 (luna nuova)
23/8/98 0.780
24/8/98 0.814
25/8/98 0.848
26/8/98 0.882
27/8/98 0.916
28/8/98 0.949
29/8/98 0.983 (primo quarto)
30/8/98 1.765
31/8/98 5.151
Sperando in una soluzione,
Salutoni a te.
R.P.
Option Explicit
Dim fase
Dim g
Dim m
Dim a
Dim x
Dim y
Dim jd
Dim DataCalc
Dim adesso
Dim NumGiornoSett
Private Sub cmdCalcola_Click()
adesso = Date
DataCalc = InputBox("Digita la Data", "Immetti Data per il calcolo della Fase", adesso)
If Not IsDate(DataCalc) Then
    MsgBox ("è stato digitato Annulla")
    Exit Sub
End If
txtMostraData.Text = DataCalc
txtDataGiorno = Format(DataCalc, "dddd") ' Visualizza il giorno della settimana
 a = Year(DataCalc)
 m = Month(DataCalc)
 g = Day(DataCalc)
If a < 0 Then
    a = a + 1
End If
x = Int((m - 3) / 12)
y = Int(((m - 2) - (x * 12)) * 30.59)
jd = Int((a + x + 4712) * 365.25) + y + g + 29
If jd >= 2299170 Then
    jd = jd + 2 - Int(0.75 * Int((a + 100 + x) / 100))
End If
txtJD.Text = jd
fase = jd / 29.53059 - 0.55904
fase = fase - Int(fase)
txtFasePerc.MaxLength = 5
txtFasePerc.Text = fase
lblData.Caption = "Data"
'NumGiornoSett = jd Mod 7 '(0= lun, 6= dom)
If fase >= 0 Then
    If fase <= 0.24999 Then
        txtfase.Text = "Luna Primo Quarto"
    End If
End If
If fase >= 0.25 Then
    If fase <= 0.49999 Then
        txtfase.Text = "Luna Piena"
    End If
End If
If fase >= 0.5 Then
    If fase <= 0.74999 Then
        txtfase.Text = "Luna Ultimo Quarto"
    End If
End If
If fase >= 0.75 Then
    If fase <= 0.99999 Then
        txtfase.Text = "Luna Nuova"
    End If
End If
End Sub
'se fase è tra 0.00 e 0.24999: primo quarto
            '  tra 0.25 e 0.49999: luna piena
             ' tra 0.50 e 0.74999: ultimo quarto
             ' tra 0.75 e 0.99999: luna nuova
'1. sia g il giorno, m il mese e a l'anno di cui si vuole determinare il JD;
'2. se a<0, allora a=a+1
'3. calcolare x=Int((m-3)/12)
'4. calcolare y=Int(((m-2)-(x*12))*30.59)
'5. calcolare JD=Int((a+x+4712)*365.25)+y+g+29
'6. se JD>=2299170 allora JD=JD+2-Int(0.75*Int((a+100+x)/100))
'il giorno della settimana si ottiene calcolando il resto della divisione
'per sette di JD; 0 corrisponde a lunedì e 6 a domenica.
Private Sub cmdEsci_Click()
End
End Sub

 ho pensato di inviare il codice risultante come l'ho fatto io perchč


 intera di un numero)

 intera di un numero)

 intera di un numero)

Scusate il triplo post, ma qui c'è un temporale e il server mi dava
errore di spedizione. Poi, tra un tentativo e l'altro modificavo pure il
testo... :-)
Maurizio

 > ho pensato di inviare il codice risultante come l'ho fatto io perchè


ma questo č ciň che deve fare...
dovrebbe esistere un'altra funzione con il nome probabile di round o giů di
lě che approssima all'intero piů vicino.

lě che approssima all'intero piů vicino.
CInt()
-------------------------------
Louis Cretier  -  R1100RS/R80GS      
http://www.show.it/lcretier.htm
-------------------------------
"L'uomo accorto impara dai propri errori
 il saggio impara da quelli altrui"