Un piccolo tool educativo scritto in linguaggio Visual Basic 6.0
Un Programma Educativo sul Sistema Solare in Visual Basic 6.0
Questo programma, scritto in Visual Basic 6.0, offre una simulazione grafica interattiva del sistema solare. Consente di calcolare e visualizzare le posizioni eliocentriche dei pianeti utilizzando parametri orbitali semplificati.
Caratteristiche Principali
Simulazione Interattiva: Mostra i pianeti e il Sole con grafica colorata e dimensioni proporzionali.
Calcoli Astronomici: Usa formule di base per determinare le orbite planetarie.
Facilità d’Uso: Permette zoom e aggiornamenti dinamici della posizione dei pianeti.
Codice Condiviso: Il codice sorgente è disponibile per fini educativi e può essere modificato e ampliato.
Questo progetto è ideale per studenti e appassionati di programmazione e astronomia che desiderano esplorare il sistema solare e apprendere principi di calcolo e grafica in VB6.
Dati semplificati ma realistici
I parametri orbitali, le distanze, le dimensioni dei pianeti, il tempo di rivoluzione, per quanto possano essere semplificati, rendono questo modello realistico!
Option Explicit
' Struttura per coordinate eliocentriche
Private Type Coord
X As Double
Y As Double
End Type
' Parametri orbitali per pianeti (a: semiasse maggiore, e: eccentricità, L: longitudine media, ?: argomento del perielio)
Private PlanetOrbitalParams(1 To 9, 1 To 4) As Double
Private PlanetNames(1 To 9) As String
Private PlanetColors(1 To 9) As Long
' Fattore di scala
Private FattoreScala As Double
Private date_input As String
Private Sub Form_Load()
' Configura la PictureBox
picture1.ScaleMode = vbPixels
picture1.AutoRedraw = True
picture1.BackColor = vbBlack
picture1.ForeColor = vbWhite
' Parametri orbitali (valori medi, approssimati)
PlanetOrbitalParams(1, 1) = 0.39: PlanetOrbitalParams(1, 2) = 0.205: PlanetOrbitalParams(1, 3) = 252.25: PlanetOrbitalParams(1, 4) = 77.46 ' Mercurio
PlanetOrbitalParams(2, 1) = 0.72: PlanetOrbitalParams(2, 2) = 0.007: PlanetOrbitalParams(2, 3) = 181.98: PlanetOrbitalParams(2, 4) = 131.53 ' Venere
PlanetOrbitalParams(3, 1) = 1#: PlanetOrbitalParams(3, 2) = 0.017: PlanetOrbitalParams(3, 3) = 100.47: PlanetOrbitalParams(3, 4) = 102.94 ' Terra
PlanetOrbitalParams(4, 1) = 1.52: PlanetOrbitalParams(4, 2) = 0.093: PlanetOrbitalParams(4, 3) = 355.45: PlanetOrbitalParams(4, 4) = 336.04 ' Marte
PlanetOrbitalParams(5, 1) = 5.2: PlanetOrbitalParams(5, 2) = 0.049: PlanetOrbitalParams(5, 3) = 34.33: PlanetOrbitalParams(5, 4) = 14.27 ' Giove
PlanetOrbitalParams(6, 1) = 9.58: PlanetOrbitalParams(6, 2) = 0.056: PlanetOrbitalParams(6, 3) = 50.08: PlanetOrbitalParams(6, 4) = 93.06 ' Saturno
PlanetOrbitalParams(7, 1) = 19.22: PlanetOrbitalParams(7, 2) = 0.046: PlanetOrbitalParams(7, 3) = 314.06: PlanetOrbitalParams(7, 4) = 170.96 ' Urano
PlanetOrbitalParams(8, 1) = 30.05: PlanetOrbitalParams(8, 2) = 0.01: PlanetOrbitalParams(8, 3) = 304.88: PlanetOrbitalParams(8, 4) = 44.97 ' Nettuno
PlanetOrbitalParams(9, 1) = 39.48: PlanetOrbitalParams(9, 2) = 0.249: PlanetOrbitalParams(9, 3) = 238.95: PlanetOrbitalParams(9, 4) = 224.07 ' Plutone
' Nomi dei pianeti
PlanetNames(1) = "Mercurio"
PlanetNames(2) = "Venere"
PlanetNames(3) = "Terra"
PlanetNames(4) = "Marte"
PlanetNames(5) = "Giove"
PlanetNames(6) = "Saturno"
PlanetNames(7) = "Urano"
PlanetNames(8) = "Nettuno"
PlanetNames(9) = "Plutone"
' Colori dei pianeti
PlanetColors(1) = RGB(200, 200, 200)
PlanetColors(2) = RGB(255, 223, 186)
PlanetColors(3) = RGB(0, 128, 255)
PlanetColors(4) = RGB(255, 69, 0)
PlanetColors(5) = RGB(255, 215, 0)
PlanetColors(6) = RGB(210, 180, 140)
PlanetColors(7) = RGB(173, 216, 230)
PlanetColors(8) = RGB(0, 0, 139)
PlanetColors(9) = RGB(128, 0, 128) ' Plutone
' Inizializza il fattore di scala
FattoreScala = 40
txtDate.Text = Format(Now, "YYYY-MM-DD HH:MM")
date_input = txtDate.Text
' Disegna il sistema solare all'avvio
Call CalcolaPosizioni(date_input)
tmrRefresh.Interval = 500
tmrRefresh.Enabled = True
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
' Gestione input manuale
Select Case Chr(KeyAscii)
Case "R", "r" ' Ridisegna
Call CalcolaPosizioni(date_input)
Case "+" ' Zoom in
FattoreScala = FattoreScala + 5
Call CalcolaPosizioni(date_input)
Case "-" ' Zoom out
FattoreScala = FattoreScala - 5
'If FattoreScala < 10 Then FattoreScala = 10 ' Limita lo zoom out
Call CalcolaPosizioni(date_input)
End Select
End Sub
Private Sub CalcolaPosizioni(DataInput As String)
Dim JD As Double
Dim CentroX As Single, CentroY As Single
' Centro della PictureBox
CentroX = picture1.ScaleWidth / 2
CentroY = picture1.ScaleHeight / 2
' Calcola il Julian Day dalla data e ora
JD = CalcolaJulianDay(DataInput)
' Pulisci la PictureBox
picture1.Cls
' Disegna il sistema solare
Call DisegnaSistemaSolare(CentroX, CentroY, FattoreScala, JD)
End Sub
Private Sub DisegnaSistemaSolare(CentroX As Single, CentroY As Single, Scala As Double, JD As Double)
Dim i As Integer
Dim Posizione As Coord
Dim Dimensioni(1 To 9) As Double
' Dimensioni relative dei pianeti rispetto al Sole
' Valori approssimativi, scala arbitraria
Dimensioni(1) = 2 ' Mercurio
Dimensioni(2) = 4 ' Venere
Dimensioni(3) = 4.5 ' Terra
Dimensioni(4) = 3.5 ' Marte
Dimensioni(5) = 10 ' Giove
Dimensioni(6) = 8 ' Saturno
Dimensioni(7) = 6 ' Urano
Dimensioni(8) = 6 ' Nettuno
Dimensioni(9) = 2 ' Plutone
' Disegna il Sole
picture1.FillStyle = vbFSSolid
picture1.FillColor = vbYellow
picture1.Circle (CentroX, CentroY), 20, vbYellow ' Il Sole è il più grande (diametro fisso)
' Disegna i pianeti
For i = 1 To 9
' Calcola la posizione eliocentrica
Posizione = CalcolaPosizioneEliocentrica(i, JD)
' Scala le coordinate per la visualizzazione
Posizione.X = CentroX + Posizione.X * Scala
Posizione.Y = CentroY - Posizione.Y * Scala ' Inverti l'asse Y
' Disegna il pianeta (riempito)
picture1.FillStyle = vbFSSolid
picture1.FillColor = PlanetColors(i)
picture1.Circle (Posizione.X, Posizione.Y), Dimensioni(i), PlanetColors(i)
' Scrivi il nome del pianeta
picture1.ForeColor = vbWhite
picture1.CurrentX = Posizione.X - 15
picture1.CurrentY = Posizione.Y + 10
picture1.Print PlanetNames(i)
Next i
End Sub
Private Function CalcolaJulianDay(DataInput As String) As Double
Dim AnnoVal As Long, MeseVal As Long, GiornoVal As Long
Dim OraDec As Double
Dim DataPart() As String, DataParteGiorno() As String, OraPart() As String
' Splitta la stringa in data e ora
DataPart = Split(DataInput, " ")
If UBound(DataPart) < 1 Then Exit Function ' Verifica validità
' Splitta la parte della data in anno, mese, giorno
DataParteGiorno = Split(DataPart(0), "-")
AnnoVal = CLng(DataParteGiorno(0))
MeseVal = CLng(DataParteGiorno(1))
GiornoVal = CLng(DataParteGiorno(2))
' Splitta la parte dell'ora in ore e minuti
OraPart = Split(DataPart(1), ":")
OraDec = CLng(OraPart(0)) + (CLng(OraPart(1)) / 60)
' Calcolo del Julian Day
Dim A As Long, Y As Long, M As Long
A = Int((14 - MeseVal) / 12)
Y = AnnoVal + 4800 - A
M = MeseVal + 12 * A - 3
CalcolaJulianDay = GiornoVal + Int((153 * M + 2) / 5) + 365 * Y + Int(Y / 4) - Int(Y / 100) + Int(Y / 400) - 32045
CalcolaJulianDay = CalcolaJulianDay + (OraDec - 12) / 24
End Function
Private Function CalcolaPosizioneEliocentrica(IndicePianeta As Integer, JD As Double) As Coord
Dim ParamA As Double, ParamE As Double, LongMedia As Double, ArgPerielio As Double
Dim AnomaliaMedia As Double, AnomaliaVera As Double
Dim Risultato As Coord
' Ottieni i parametri orbitali
ParamA = PlanetOrbitalParams(IndicePianeta, 1)
ParamE = PlanetOrbitalParams(IndicePianeta, 2)
LongMedia = PlanetOrbitalParams(IndicePianeta, 3)
ArgPerielio = PlanetOrbitalParams(IndicePianeta, 4)
' Calcola l'anomalia media
AnomaliaMedia = LongMedia + (JD Mod 365.25) * 360 / 365.25
' Calcola l'anomalia vera
AnomaliaVera = AnomaliaMedia + (2 * ParamE * Sin(AnomaliaMedia * 3.14159 / 180))
' Calcola le coordinate eliocentriche
Risultato.X = ParamA * (Cos(AnomaliaVera * 3.14159 / 180))
Risultato.Y = ParamA * (Sin(AnomaliaVera * 3.14159 / 180))
CalcolaPosizioneEliocentrica = Risultato
End Function
Private Sub Form_Resize()
picture1.Width = ScaleWidth
picture1.Height = ScaleHeight
Call CalcolaPosizioni(date_input)
End Sub
Private Sub tmrRefresh_Timer()
date_input = Format(CDate(date_input) + 1, "YYYY-MM-DD HH:MM")
txtDate.Text = date_input
Call CalcolaPosizioni(date_input)
End Sub
Private Sub cmdZoomIN_Click()
Form_KeyPress Asc("+")
End Sub
Private Sub cmdZoomOUT_Click()
Form_KeyPress Asc("-")
End Sub
Avviso Importante
Grazie per aver scelto di scaricare i nostri software gratuiti! Prima di procedere con il download, ti preghiamo di leggere attentamente quanto segue:
- Uso Gratuito: Il software che stai per scaricare è fornito gratuitamente e senza alcun costo.
- Nessuna Garanzia: Il software è fornito “così com’è”, senza garanzia di alcun tipo, espressa o implicita.
- Limitazione di Responsabilità: Il programmatore e il sito non sono responsabili per eventuali danni diretti, indiretti, incidentali o consequenziali che possano derivare dall’uso o dall’incapacità di usare il software. L’utente utilizza il software a proprio rischio.
- Nessun Supporto: Non è previsto alcun tipo di supporto tecnico o assistenza per l’uso del software.
- NOTE: Si raccomanda di fare sempre un backup dei propri dati e di verificare il software con un antivirus prima di installarlo.
- IMPORTANTE: Alcuni software eseguibili e/o pacchetti di installazione di programmi sviluppati per Windows, potrebbero attivare l’antivirus. Si tratta di falsi positivi dovuti alla mancanza di un certificato digitale. I certificati digitali sono rilasciati a pagamento da organizzazioni preposte. I software qui pubblicati, sono GRATUITI.
Procedendo con il download, accetti implicitamente questi termini e condizioni.
Grazie per la comprensione e buon utilizzo!