Archive for Maggio 2022
Calcolo dell’ombra solare
Oggi mentre camminavo, ho guardato la mia ombra e mi è venuta l’idea di inserire anche questa nella mia WebApp su meteo e astronomia.
Quindi mi sono chiesto: come calcolare la lunghezza dell’ombra in un determinato momento in qualunque posto?
Servirà prima calcolare la posizione del Sole e poi in base a Longitudine e Latitudine si potrà sapere la lunghezza dell’ombra solare.
Scriverò una piccola applicazione in VB.NET dove in input mettiamo l’altezza della persona e l’altezza del Sole.

Poichè sappiamo, ed è spiegato nel mio libro di astrometria in vendita su https://ilmiolibro.kataweb.it/libro/scienza-e-tecnica/623122/astronomia-sferica-e-teorica/
che in un triangolo rettangolo, un cateto è uguale alla misura dell’altro cateto per la tangente dell’angolo opposto o per la cotangente dell’angolo adiacente.
Nel mio libro è anche spiegato come ottenere l’altezza del Sole in un determinato momento, che magari lo potrei riproporre in un successivo articolo.
Nella figura, l’ombra è orizzontale ed è quella da calcolare. Poichè sappiamo l’altezza della persona o di un palo, possiamo usare la formula:
lunghezza ombra = altezza palo * cotang altezza Sole
Ecco quindi il codice della piccola applicazione:
Dim AltezzaSole As Integer = CInt(InputBox("Inserire l'altezza del Sole in gradi"))
Dim AltezzaPersona As Integer = CInt(InputBox("Inserire l'altezza del palo o della persona in cm"))
Dim LunghezzaOmbra = AltezzaPersona * 1 / System.Math.Tan(AltezzaSole * System.Math.PI / 180)
MsgBox("La lunghezza dell'ombra è " & FormatNumber(LunghezzaOmbra, 0).ToString & " cm.")
Per verificare se funziona, mettiamo 90ç come altezza Sole e se visualizza che l’ombra è lunga 0 cm allora avete scritto correttamente.
Ovviamente sappiamo che solo due volte all’anno, e solo all’Equatore, abbiamo esattamente il Sole a 90°.
Oggi a Milano l’altezza massima è stata di 62° alle 13.19 (ora locale) e vediamo quanto misurava l’ombra.

Metto 162 cm come altezza.

Ed ecco quanto misurava la mia ombra quando il sole si trovava allo Zenith.

Quando invece ho visto l’ombra che mi ha dato l’idea, era lunga 118 cm.
Se volete studiare la Trigonometria, potete provare a mettere 0 come altezza ed ecco il risultato:

Conversione ora di Unix
Nelle ultime settimane sto provando le API di vari servizi Web, in particolare sull’astronomia e altri dati da mettere nella mia Web App.
I risultati di queste richieste, a volte, sono espressi in ora di Unix.
Ora di Unix? E cosa è? Chi mastica informatica sa di cosa sto parlando.
E’ un indicatore temporale; esso infatti esprime il numero dei secondi che sono passati dalla mezzanotte del 1° Gennaio 1970.
Nell’astronomia si usa il giorno giuliano, nel web si usa l’ora di Unix.
In questo articolo quindi vediamo il codice per trasformare un numero espresso in Ora (o Tempo) di Unix in una data leggibile anche ai comuni mortali, ossia in giorno, mese, anno, ora, minuti e secondi.
Apriamo quindi Visual Studio, creiamo un nuovo progetto in Vb.NET WPF, .NET Framework, ci aggiungiamo un pulsante e quindi scriviamo il seguente codice:
Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
Dim UnixTime As String = InputBox("Inserire l'ora di Unix")
Dim DataOra As DateTime = ConverteUnixTimeToDataOra(UnixTime)
MessageBox.Show(DataOra.ToString)
End Sub
Private Function ConverteUnixTimeToDataOra(unixTime As String) As Date
Dim Timestamp As Double = unixTime
Dim DataOraUnix As System.DateTime = New System.DateTime(1970, 1, 1, 0, 0, 0, 0)
Dim DataOra As DateTime = DataOraUnix.AddSeconds(Timestamp)
Return DataOra
End Function
Proviamo a lanciare l’applicazione, mettiamo come Input: 1651593937

Diamo l’OK ed ecco data e ora attuale:

L’ora ci verrà fornita in GMT o TU, per cui si dovrà aggiungere o togliere il proprio fuso orario ed eventualmente aggiungere l’ora legale. Per cui, al momento che sto scrivendo questo articolo, sono le 18:05 del 3/5/2022.
Adesso, possiamo usare le API che forniscono risultati in questo modo.
Leggi l'articolo intero | Make a Comment ( None so far )