SIMULAZIONE SISTEMA SOLARE (VB6)

Un piccolo tool educativo scritto in linguaggio Visual Basic 6.0

Simulazione Sistema Solare

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!

Simulazione Sistema Solare
Simulazione Sistema Solare
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
Solar System (simulazione del sistema solare)
Solar System (simulazione del sistema solare)

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:

  1. Uso Gratuito: Il software che stai per scaricare è fornito gratuitamente e senza alcun costo.
  2. Nessuna Garanzia: Il software è fornito “così com’è”, senza garanzia di alcun tipo, espressa o implicita.
  3. 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.
  4. Nessun Supporto: Non è previsto alcun tipo di supporto tecnico o assistenza per l’uso del software.
  5. NOTE: Si raccomanda di fare sempre un backup dei propri dati e di verificare il software con un antivirus prima di installarlo.
  6. 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!

Versione: 1.0