View Full Version : Non funziona la formula
visodont
29-05-2004, 10:58
Gentili programmatori, date un' occhiata al programmino sotto riportato, che dovrebbe servire a calcolare gli angoli di un triangolo disegnato su un' immagine con la funzione "Line" del VISUAL BASIC 6 e di cui in questo caso per fare un' esempio do le misure.
*******************************************
Private Sub Command2_Click()
Dim a, b, c, Alpha, Beta, Gamma As Double
a = 10
b = 10
c = 10
Call Angoli(a, b, c, Alpha, Beta, Gamma)
End Sub
************************************
Function Angoli(a, b, c, Alpha, Beta, Gamma)
' Alpha = lati bc
' beta = Lati ca
' Gamma = lati cb
Alpha = ArcCos(b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c)
Beta = ArcCos(a ^ 2 + c ^ 2 - b ^ 2) / (2 * a * c)
Gamma = 180 - Alpha - Beta
End Function
*********************************************
Mandando in esecuzione quasta funzione mi da errore di
"Sub o funzione non definita."
In quest'altra formula ........................
Al posto di Cos (....... ) dovrei scrivere Cos alla meno 1 - Come fare con il VB6, quale è la sintassi giusta ?
Alpha = Cos "alla -1" (b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c)
Beta = Cos (a ^ 2 + c ^ 2 - b ^ 2) / (2 * a * c)
Grazie,
Zeno
Boh!?! la funzione ArcCos è documentata, ma pure a me da errore.... non la vede come funzione vb.
ArcCos non è documentata... La devi derivare... Comunque quante volte hai fatto questa domanda ?
http://forum.hwupgrade.it/showthread.php?s=&threadid=694719&highlight=ArcCos
visodont
30-05-2004, 10:32
Scusa ma cosa vuol dire che la devo DERIVARE ? potresti darmi un 'esempio pratico perchè un esempio vale sicuramente di più di cento spiegazioni teoriche.
Ho incollato questa funzione che mi hai mandato ma non funziona, oppure sbalio a chiamare questa funzione
Come la dovrei chiamre chiamare ? Call.........???
E poi cosa ottengo, non vedo le misure della lunghezza degli angoli. Io ho le tre lunghezze dei tre angoli
***********************************
Function ArcCos(X As Double)
ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End Function
***********************************
Comunque ARCCOS il VB6, pur descritta non la riconosce, mi sembra un grave errore del VB6.
Grazia ancora
Zeno
Visodont
Quella è la funzione arcoseno... VB di suo non l'ha e va scritta derivandola dalla funzione arcotangente ;)
Quella che ti ho scritto è un funzione da mettere dentro al tuo codice VB (fuori da ogni procedura o funzione)...
Utilizza quella funzione per ottenere le misure degli angoli secondo quanto ti hanno scritto negli altri post...
Private Sub Command2_Click()
Dim a, b, c, Alpha, Beta, Gamma As Double
a = 10
b = 10
c = 10
Call Angoli(a, b, c, Alpha, Beta, Gamma)
End Sub
Function ArcCos(X As Double)
ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End Function
Function Angoli(a, b, c, Alpha, Beta, Gamma)
' Alpha = lati bc
' beta = Lati ca
' Gamma = lati cb
Alpha = ArcCos(b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c)
Beta = ArcCos(a ^ 2 + c ^ 2 - b ^ 2) / (2 * a * c)
Gamma = 180 - Alpha - Beta
End Function
visodont
30-05-2004, 19:35
Caro Cionci,
sono proprio sfortunato ma.....
ho provato questo codice che mi hai inviato gentilmente tu, e che riporto sotto, per poter usare ArcCos come funzione derivata in quanto il VB6 non ce l' ha.
Caro Cionci,
sono proprio sfortunato. Ho provato esattamente questo codice per ottenere un angolo conoscendo i lati del triangolo con la funzione ArcCos in modo derivato che mi hai molto gentilmente inviato tu, ma mi da il messaggio di errore 5, "Chiamata di routine o argomento non valido".
Noto però che nella funzione ArcSen(X As Double )
ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
c' è una X alla quale non è assegnato nessun valore, forse è li il problema ?
Ho seguito il programma passo passo e vedo che dalla funzione Angoli
appena il puntatore si sposta su AcrCos salta subito alla funzione
ArcCos(..........) come credo debba essere, ma proprio li mi da quell' errore e tutto si ferma con qualche mia imprecazione al VB6 !
Mi dispiacerebbe dovermi dichiarare vinto ! Anche perchè un mio collega è riuscito in quello che io vorrei fare e se non ci riesco, poi mi prende in giro per il resto della vita ! he...he...he.....
Il collega mi ha inviato la sua soluzione, NON ha usato quella funzione e a fattouno stranissimo volo pindarico, molto lungo, per arrivare allo stesso risultato al quale si potrebbe arrivare molto semplicemente con il codice che tu mi hai inviato.
Se la tua soluzione funzionasse davvero, sarebbe tutto risolto, con molta semplicità, farei un figurone con quel collega e gli potrei anche fare qualche amichevole sberleffo !
Già, ma poi il risultato sarebbe ( speriamo..sarà ) in radianti o in gradi ?
Aspetto con ansia la tua risposta e grazie ancora per l' aiuto !
Zeno
VisOdont
*********************************************************
Private Sub Command2_Click()
Dim a, b, c, Alpha, Beta, Gamma As Double
a = 10
b = 10
c = 10
Call Angoli(a, b, c, Alpha, Beta, Gamma)
End Sub
Function ArcCos(X As Double)
ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End Function
Function Angoli(a, b, c, Alpha, Beta, Gamma)
' Alpha = lati bc
' beta = Lati ca
' Gamma = lati cb
Alpha = ArcCos(b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c)
Beta = ArcCos(a ^ 2 + c ^ 2 - b ^ 2) / (2 * a * c)
Gamma = 180 - Alpha - Beta
End Function
Sostanzialmente non c'era niente di sbagliato...in ArcCos... Mancavano delle parentesi nell'argomento passato ad ArcCos che doveva essere comrpeso fra -1 e 1....
Private Sub Command2_Click()
Dim a, b, c, Alpha, Beta, Gamma As Double
a = 15
b = 10
c = 10
Call Angoli(a, b, c, Alpha, Beta, Gamma)
End Sub
Function ArcCos(X As Double)
If X = -1 Then
ArcCos = 2 * ArcCos(0) 'ritorno pi greco
ElseIf X = 1 Then
ArcCos = 0
Else
ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End If
End Function
Function Angoli(a, b, c, Alpha, Beta, Gamma)
' Alpha = lati bc
' beta = Lati ca
' Gamma = lati cb
pi = 2 * ArcCos(0) 'mi calcolo pi greco
Alpha = ArcCos((b ^ 2 + c ^ 2 - a ^ 2) / (2 * b * c))
Beta = ArcCos((a ^ 2 + c ^ 2 - b ^ 2) / (2 * a * c))
Gamma = pi - Alpha - Beta
MsgBox "Alpha = " & Alpha & " Beta = " & Beta & " Gamma = " & Gamma
End Function
visodont
01-06-2004, 08:56
Ti ringrazio moltissimo !!!!!!! ORa TUTTO FUNZIONA !!!
Un Ultima cosa... in che misura sono espressi i risultati ?
mi servirebbero in GRADI come dovrei fare
Zeno
Visodont
...........
per cionci...........
volevo sapere se ArcCos del vb corrisponde alla funzione tan del c++
No...tan è tangente... ArcCos è arcocoseno (e non è definita in VB)...
double acos( double x ); è ArcCos in C e C++...
tan del C corrisponde a Tan del Vb...
visodont
04-06-2004, 16:42
Dovrei calcolare il coefficiente angolare di due rette su un piano, che accludo come esempio nel disegno allegato, per calcolare l' angolo che formerebbero se si incontrassero.
Il quel caso si incontrerebbero fuori dal grafico ma facciamo finta di no.
Purtroppo il Visual Basic 6 non ha la funzione Arcotangente che credo serva per questo scopo e credo la si debba derivare in qualche modo ma non so come.
Sarebbe possibile avere il codice completo di esempio, con i valori riportati sul disegno e la funzione Arcotangente che funziona ? Un esempio è più chiaro di mille spiegazioni.
Grazie mille ancora.
Visodont
Atn è arcotangente...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctatn.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vagrpderivedmath.asp
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.