Risoluzione di un triangolo rettangolo

Posted on 2 luglio 2022. Filed under: Senza categoria |

Quando andavo a scuola, ormai ben 35 anni fa circa, una delle materie che mi piacevano di più era la matematica. Poi quando spiegarono la trigonometria, mi si aprì un mondo e oggi matematica a trigonometria sono delle mie passioni.

Cercando delle informazioni per un altro articolo, mi sono trovato su alcuni siti che parlavano dell’acronimo SohCahToa. Non l’avevo mai sentito e così ho indagato e da questo nasce il seguente articolo.

Iniziamo av edere cosa è e cosa significa questo acronimo. dividiamolo in 3 acronimi da tre lettere.

Otteniamo: Soh, Cah e Toa. Le prime lettere di ognuna delle tre parole indicano seno, coseno e tangente.

La o indica il lato opposto all’angolo Teta, la a indica l’adiacente all’angolo Teta e la h indica l’ipotenusa.

Parliamo ovviamente di un triangolo rettangolo e questi acronimi servono a trovare i dati mancanti del triangolo, conoscendone 2. Soh significa Sin=Opposto diviso ipotenusa, Cah significa Cos=adiacente diviso ipotenusa e Toa significa Tangente =Opposto diviso adiacente.

La figura di seguito mostra la situazione:

Creiamo quindi un piccolo programmino per il calcolo dei dati mancanti del triangolo rettangolo, conoscendone solo 2. Apriamo Visual Studio e creiamo un progetto Windows Forms in Vb.NET.

Ci mettiamo 5 label, 4 textbox e 1 pulsante. Ho messo poi nel form le immagini per aiutarci.

Questa è la Form:

La prima cosa da fare è verificare che siano riempiti 2 campi:

    If txtIpotenusa.Text = "" Then vuoto = vuoto + 1
    If txtCateto1.Text = "" Then vuoto = vuoto + 1
    If txtCateto2.Text = "" Then vuoto = vuoto + 1
    If txtAngoloTeta.Text = "" Then vuoto = vuoto + 1

    If vuoto > 2 Then MsgBox("Attenzione, solo 2 campi possono essere vuoti") : Exit Sub

La seconda cosa da fare è verificare che i campi riempiti siano numerici:

        If txtIpotenusa.Text <> "" And IsNumeric(txtIpotenusa.Text) = False Then MsgBox("Attenzione, l'ipotenusa deve essere un numero") : Exit Sub
        If txtCateto1.Text <> "" And IsNumeric(txtCateto1.Text) = False Then MsgBox("Attenzione, cateto1 deve essere un numero") : Exit Sub
        If txtCateto2.Text <> "" And IsNumeric(txtCateto2.Text) = False Then MsgBox("Attenzione, cateto2 deve essere un numero") : Exit Sub
        If txtAngoloTeta.Text <> "" And IsNumeric(txtAngoloTeta.Text) = False Then MsgBox("Attenzione, Teta deve essere un numero") : Exit Sub

Vediamo adesso caso per caso cosa c’è e quindi cosa manca:

    If txtIpotenusa.Text = "" And (txtCateto1.Text <> "" And txtCateto2.Text <> "") Then manca = "I"
    If txtCateto1.Text = "" And (txtIpotenusa.Text <> "" And txtCateto2.Text <> "") Then manca = "O"
    If txtCateto2.Text = "" And (txtCateto1.Text <> "" And txtIpotenusa.Text <> "") Then manca = "A"

    If txtAngoloTeta.Text <> "" And txtCateto1.Text <> "" Then manca = "T1"
    If txtAngoloTeta.Text <> "" And txtCateto2.Text <> "" Then manca = "T2"
    If txtAngoloTeta.Text <> "" And txtIpotenusa.Text <> "" Then manca = "T3"

E vediamo infine caso per caso quale formula delle tr3 richiamare, in base a quello che conosciamo.

Mettiamo assieme il tutto e questo è il codice finale:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim manca As String = ""
        Dim Opposto As Double
        Dim Adiacente As Double
        Dim Ipotenusa As Double
        Dim SinTeta As Double
        Dim CosTeta As Double
        Dim TanTeta As Double
        Dim Teta As Double
        Dim Teta1 As Double
        Dim Teta2 As Double
        Dim Teta3 As Double
        Dim vuoto = 0

        If txtIpotenusa.Text = "" Then vuoto = vuoto + 1
        If txtCateto1.Text = "" Then vuoto = vuoto + 1
        If txtCateto2.Text = "" Then vuoto = vuoto + 1
        If txtAngoloTeta.Text = "" Then vuoto = vuoto + 1

        If vuoto > 2 Then MsgBox("Attenzione, solo 2 campi possono essere vuoti") : Exit Sub

        If txtIpotenusa.Text <> "" And IsNumeric(txtIpotenusa.Text) = False Then MsgBox("Attenzione, l'ipotenusa deve essere un numero") : Exit Sub
        If txtCateto1.Text <> "" And IsNumeric(txtCateto1.Text) = False Then MsgBox("Attenzione, cateto1 deve essere un numero") : Exit Sub
        If txtCateto2.Text <> "" And IsNumeric(txtCateto2.Text) = False Then MsgBox("Attenzione, cateto2 deve essere un numero") : Exit Sub
        If txtAngoloTeta.Text <> "" And IsNumeric(txtAngoloTeta.Text) = False Then MsgBox("Attenzione, Teta deve essere un numero") : Exit Sub

        If txtIpotenusa.Text = "" And (txtCateto1.Text <> "" And txtCateto2.Text <> "") Then manca = "I"
        If txtCateto1.Text = "" And (txtIpotenusa.Text <> "" And txtCateto2.Text <> "") Then manca = "O"
        If txtCateto2.Text = "" And (txtCateto1.Text <> "" And txtIpotenusa.Text <> "") Then manca = "A"

        If txtAngoloTeta.Text <> "" And txtCateto1.Text <> "" Then manca = "T1"
        If txtAngoloTeta.Text <> "" And txtCateto2.Text <> "" Then manca = "T2"
        If txtAngoloTeta.Text <> "" And txtIpotenusa.Text <> "" Then manca = "T3"

        If txtIpotenusa.Text <> "" Then Ipotenusa = CDbl(txtIpotenusa.Text)
        If txtCateto1.Text <> "" Then Opposto = CDbl(txtCateto1.Text)
        If txtCateto2.Text <> "" Then Adiacente = CDbl(txtCateto2.Text)
        If txtAngoloTeta.Text <> "" Then Teta = CDbl(txtAngoloTeta.Text)

        'CALCOLA ELEMENTI MANCANTI
        If manca <> "T1" And manca <> "T2" And manca <> "T3" And manca <> "T4" Then
            If manca = "I" Then
                Ipotenusa = Math.Sqrt(Opposto ^ 2 + Adiacente ^ 2)
                txtIpotenusa.Text = Ipotenusa
            End If
            If manca = "O" Then
                Opposto = Math.Sqrt(Ipotenusa ^ 2 - Adiacente ^ 2)
                txtCateto1.Text = Opposto
            End If
            If manca = "A" Then
                Adiacente = Math.Sqrt(Ipotenusa ^ 2 - Opposto ^ 2)
                txtCateto2.Text = Adiacente
            End If
            SinTeta = Opposto / Ipotenusa
            CosTeta = Adiacente / Ipotenusa
            TanTeta = Opposto / Adiacente
            Teta1 = Math.Asin(SinTeta) * 180 / Math.PI
            Teta2 = Math.Asin(SinTeta) * 180 / Math.PI
            Teta3 = Math.Asin(SinTeta) * 180 / Math.PI
            txtAngoloTeta.Text = Teta1 & " " & Teta2 & " " & Teta3
        Else
            SinTeta = Math.Sin(Teta * Math.PI / 180)
            CosTeta = Math.Cos(Teta * Math.PI / 180)
            TanTeta = Math.Tan(Teta * Math.PI / 180)
            If manca = "T1" Then
                'If txtAngoloTeta.Text <> "" And txtCateto1.Text <> "" Then manca = "T1"
                'CALCOLARE IPOTENUSA E ADIACENTE
                Ipotenusa = Opposto / SinTeta
                Adiacente = Opposto / TanTeta
                txtIpotenusa.Text = Ipotenusa
                txtCateto2.Text = Adiacente
            ElseIf manca = "T2" Then
                'If txtAngoloTeta.Text <> "" And txtCateto2.Text <> "" Then manca = "T2"
                'CALCOLARE IPOTENUSA E OPPOSTO
                Ipotenusa = Adiacente / CosTeta
                Opposto = TanTeta * Adiacente
                txtIpotenusa.Text = Ipotenusa
                txtCateto1.Text = Opposto
            Else
                'If txtAngoloTeta.Text <> "" And txtIpotenusa.Text <> "" Then manca = "T3"
                'CALCOLARE ADIACENTE E OPPOSTO
                Adiacente = CosTeta * Ipotenusa
                Opposto = TanTeta * Adiacente
                txtCateto2.Text = Adiacente
                txtCateto1.Text = Opposto
            End If
        End If
    End Sub
End Class

Notate che ho scritto 3 volte nella casella dell’angolo, il suo valore, perchè l’arco il cui sento, l’arco il cui coseno e l’arco la cui tangente devono dare 3 valori esattamente uguali, quindi li ho scritto per conferma dell’esattezza dei nostri calcoli. Ovviamente voi potete cambiare e mettere il valore una sola volt, o su tre Textbox diverse.

Vi metto infine qualche esempio da provare:

Ovviamente, ma non l’ho scritto nel codice, si può calcolare l’angolo fra l’ipotenusa e il lato opposto, facendo 90- l’angolo teta, poichè la somma degli angoli è 180 gradi ed essendo triangolo rettangolo, il valore dell’angolo fra i due cateti è sempre 90.

Make a Comment

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Liked it here?
Why not try sites on the blogroll...

%d blogger hanno fatto clic su Mi Piace per questo: