Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    130

    [VB6] seno e coseno

    Salve ho un problema con la funzione Cos e Sin di VB6.

    In pratica per calcolare il Coseno di un anglo, le funzioni Cos e Sin di VB6 vogliono gli angoli specificati in radiali, quindi le funzioni saranno:
    CosenoX=Cos(x*3.14/180)
    SenoX=Sin(x*3.14/180)

    Tutto funziona bene fino al valore di 84°, inserendo angoli da 85 a 90 escono valore assurdi.

    Ad esempio inserendo come angolo 85 la funzione Cos restituisce come valore 8,79 inserendo 86 7,05 e così via.

    Solita cosa avviene per la funzione Seno, però ovviamente al contrario tutto ok dall'angolo 90 all'angolo 6 poi inserendo angoli inferiori a 6° riescono valori asurdi come 8,71 per l'angolo 5°.

    Cosa succede?
    Sbaglio qualcosa?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Beh sinceramente ci sono due casi sbagli tu a scrivere il codice oppure i risultati che ti vengono sono troppo grandi ma in quel caso dovresti avere degli overflow e no una generazione di numeri casuali, comunque io consiglierei di controllare la dichiarazione delle variabili e di postare un po' di codice per dagli un occhiata, se poi c'è qualcuno che ha capito subito dov'è l'errore beh buon x te

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    130
    No, non vengono numeri casuali, sempre il solito risultato che però ovviamente è sbagliato.
    Il codice è molto semplice:

    ang=text1.text
    cosA=Cos(ang*3.14/180)
    text2.text=cosA

    Questa è una prova che ho fatto quando mi sono accorto che la funzione cos non funzionava a dovere.
    Inserendo valori di angolo da 0° a 84° tutto funziona, il risultato è esatto controllato con calcolatrice, ma inserendo come valore di angolo 85° ad esmpio salta fuori 8,79 e riprovando il risultato è sempre il solito.

    Ho provato anche inserendo angoli negativi, oppure angoli maggiori di 90 ma c'è sempre questo errore.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Prova a fare così

    Dim Pi As Double
    Dim Result as Double

    Pi = CDbl("3.141592653589793")
    Result = Sin(180 * (Pi / 180))
    if Abs(Result) < 5E-15 Then Result = 0 '5E-15 is approximate

    text2 = Result

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Fonte: link potrebbe essere utile

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    130
    Grazie per le risposte, ho provato ma purtroppo anche in questo caso tutto ok fino a 85° poi risultati sballati, diversi dal precedente metodo ma comunque errati, tipo 0,63 per l'angolo 86° e -0,48 per l'angolo 87° e così via.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Boh ma scusa perchè ti interessa fare questi calcoli in vb, per quello che so è sconsigliato usare vb6 per fare giochi, si dice che è lento nei calcoli matematici, o almeno io seno e coseno li ho usati nei miei giochi in C, però ormai non mi ricordo più niente

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    130
    Semplicemente volevo creare un'applicazione che mi permettesse di calcolare la distanza e sopratutto la rotta tra due punti gps.
    Per la distanza ok, ma per calcolare l'angolo della rotta ho bisogno delle funzioni di seno o coseno.

  9. #9
    I tuoi risultati non sono sballati, semplicemente cambia la notazione.

    Fino a Cos(84°) il numero viene espresso normalmente

    Il coseno di 85° invece è un valore molto piccolo quindi viene espresso in notazione esponenziale e diventa 8,79049425294263E-02.
    Il coseno di 86° risulta invece 7,05155343703509E-02.
    Inserendolo nella tua textbox probabilmente non vedi la fine del numero....

    Prova a scrivere ad esempio
    text2.text=FormatNumber(cosA,10)

    Per aver ad esempio una rappresentazione decimale con 10 cifre dopo la virgola, vedrai che funziona, è difficile che un software sbagli i calcoli....
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    130
    Originariamente inviato da 8matt5
    I tuoi risultati non sono sballati, semplicemente cambia la notazione.

    Fino a Cos(84°) il numero viene espresso normalmente

    Il coseno di 85° invece è un valore molto piccolo quindi viene espresso in notazione esponenziale e diventa 8,79049425294263E-02.
    Il coseno di 86° risulta invece 7,05155343703509E-02.
    Inserendolo nella tua textbox probabilmente non vedi la fine del numero....

    Prova a scrivere ad esempio
    text2.text=FormatNumber(cosA,10)

    Per aver ad esempio una rappresentazione decimale con 10 cifre dopo la virgola, vedrai che funziona, è difficile che un software sbagli i calcoli....
    Cavolo hai ragione funziona.
    Grazie Mille

    Mi sembrava strana la cosa..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.