Avatar billede dennism Nybegynder
25. februar 2004 - 22:35 Der er 24 kommentarer og
4 løsninger

VB: Cos, Sin

Hvad hedder funktioner som cos, cos^-1, sin og sin^-1 i VB?
Avatar billede dennism Nybegynder
25. februar 2004 - 22:36 #1
.. Og hvordan sætter jeg en tal-værdi i anden?
Jeg har f.eks. txtliniea.Text (som indeholder et tal), som jeg gerne vil have sat i 2 (^2).
Avatar billede _cyberdude_ Nybegynder
25. februar 2004 - 22:41 #2
er ikke helt sikker, men mener at der er commandoere der heder Cos(tal) og Sin(tal) og så videre, og hvis du skal opløfte bruger du bare ^2 som du har gjordt i din beskrivelse... og hvis du skal cos^-1(tal) kan du bruge noget der ligner dette:

1/cos(tal) eller også er det cos(1/tal)
Avatar billede thedeathart Nybegynder
25. februar 2004 - 22:43 #3
cos^-1 hedder typisk arccos og det sammen med de andre

arcsin

arctan
Avatar billede thedeathart Nybegynder
25. februar 2004 - 22:44 #4
og husk at angive hvad den skal regne i - grader eller radianer
(VB er amrikansk, så radianer er typisk standart)
Avatar billede dennism Nybegynder
25. februar 2004 - 22:44 #5
dvs, det er con, arccon, sin, arcsin, tan, arctan?
Avatar billede dennism Nybegynder
25. februar 2004 - 22:46 #6
Hvordan får jeg det fra radianer til grader? :/
Avatar billede dennism Nybegynder
25. februar 2004 - 22:50 #7
Hvad er galt med denne:
    textvinkela.Text = Cos(60)
Avatar billede nmh Nybegynder
25. februar 2004 - 23:05 #8
radianer til grader:
1radian=180/pi grader
2*pi er omkredsen af enhedscirklen. Derfor er 2*pi =360 grader.

textvinkela.Text = Cos(60):
cos(60) er et tal, mens variablen på venstre side formentlig er erklæret som en tekststreng.
skriv textvinkela.Text = Cstr(Cos(60)):
Avatar billede dennism Nybegynder
25. februar 2004 - 23:19 #9
Jeg har denne:
txtvinkelb.Text = CStr(Cos(60))

De 60 som jeg indsætter opfattes for denne som 60radian, men jeg ønsker istedet at det skal være 60grader. Hvad skal det så være?

Iøvrigt ser arccon ikke ud til at virke!? Hvad skal jeg bruge i stedet?
Avatar billede nmh Nybegynder
25. februar 2004 - 23:29 #10
Dine funktioner:
Trigonometriske funktioner:
Sin, Cos, Tan
I Visual Basic er der desværre ikke alle de inverse trigonometriske funktioner:
Der er kun den omvendte funktion til Tan.
Den hedder Atn
Atn(1) er lig pi/4.
Derfor kan du omskrive grader til radianer på denne måde:
60 grader er 60*4*Atn(1)/180 radianer.

Hvis du vil have udregnet omvendte funktioner til Sin og Cos sker det ved at udtrykke diss funktioner ved hjælp af funktionen Atn, som jo er den omvendte funktion til Tan. Hvis deter vigtigt for dig at kunne udregne Arcsin og Arccos kan jeg finde de relevante formler frem, men jeg er nødt til at smutte nu.

At opløfte til potens:

x^n betyder x i n-te.
(I matematik plejer vi at kalde Atn for ArcTan)
Avatar billede nmh Nybegynder
25. februar 2004 - 23:34 #11
60grader til radianer:
60*4*Atn(1)/180
I øvrigt er cos(60grader)=1/2
Avatar billede nmh Nybegynder
26. februar 2004 - 00:27 #12
jeg fik alligevel tid nu:
Omvendt sin også kaldet Arcsin kan i VB udtrykkes således:
Hvis x er mellem -1 og 1 er værdien Atn(x/Sqr(1-x*x))
Hvis x er 1 skal værdien være pi/2 og hvis x er -1 er værdien -pi/2

Omvendt cos også kaldet Arccos kan i VB udtrykkes således:
Hvis x er mellem 0 og 1 er værdien Atn(sqr(1/(x*x)-1))
Hvis x er 0 er værdien pi/2
Hvis x er -1 eller mellem -1 og 0 er værdien pi-Atn(sqr(1/(x*x)-1))
Avatar billede dennism Nybegynder
26. februar 2004 - 09:01 #13
Forstår ikke hvorfor de ikke har lavet et omvendt funktion til con og sin!?
Avatar billede martin_moth Mester
26. februar 2004 - 10:24 #14
Fordi det sjælpdent bruges - og du kan jo selv lave dem, jf. ovenstående

VB kan heller ikke finde rødder i polynomier, differentiere osv. Det er ikke et matematikprogram. Men der er de basale funktioner, og med dem kan du selv lave dine egne funktioner, fx. arcsin osv.
Avatar billede dennism Nybegynder
26. februar 2004 - 11:04 #15
Hvordan difinerer man sin egen funktion i sin kode?
Avatar billede nmh Nybegynder
26. februar 2004 - 11:33 #16
Function Asin(x)
  if x>-1 and x<1 then
    Asin=Atn(x/Sqr(1-x*x))
  elseif x=-1 then
    Asin=-2*Atn(1)
  elseif x=1 then
    Asin=2*Atn(1)
  else
    'Asin er ikke defineret
    'Du må selv reagere på en eller anden måde
  end if
end function

Hvis du nu et sted bruger ordren a=Asin(0.5), vil a så have værdien
pi/6.
Avatar billede martin_moth Mester
26. februar 2004 - 11:34 #17
Private function Sum(Tal1 as Integer, Tal2 As Integer) as Interger
  Sum = Tal1 + Tal2
End Function

Du bruger funktionen således:

Dim resultat as integer
Resultat = 5 * sum(3,2) ' = 25

Læs mere om funktioner og procedurer her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/dt_vbconWorkingWithProceduresC.asp
Avatar billede martin_moth Mester
26. februar 2004 - 11:36 #18
Skulle nok have trykket refresh ;o)
Avatar billede sion Nybegynder
26. februar 2004 - 13:28 #19
Funktionerne i VB er simpelt nok; sin(Tal), cos(Tal) og tan(Tal). Funktionerne til invers sin, -cos og -tan er lidt mere advanceret, men jeg har lavet følgnede modul der håndterer disse.
Indsæt følgende kode i et modul:

'--------------
Global Const PI = 3.14159265358979

Public Function ArcSin(Tal As Single, Optional Radianer As Boolean = True) As Single
    Dim Resultat As Single, Grader As Single
   
    If Tal = 1 Then
        Resultat = PI / 2
    Else
        Resultat = Atn(Tal / Sqr(-Tal * Tal + 1))
    End If
    If Radianer = True Then
        ArcSin = Resultat
    Else
        Grader = Replace(Resultat, ".", ",")
        ArcSin = RadTilGrad(Resultat)
    End If
End Function

Public Function ArcCos(Tal As Single, Optional Radianer As Boolean = True) As Single
    Dim Resultat As Single, Grader As Single
   
    If Tal = 1 Then
        Resultat = PI / 2
    Else
        Resultat = Atn(-Tal / Sqr(-Tal * Tal + 1)) + 2 * Atn(1)
    End If
    If Radianer = True Then
        ArcCos = Resultat
    Else
        Grader = Replace(Resultat, ",", ".")
        ArcCos = RadTilGrad(Resultat)
    End If
End Function

Public Function ArcTan(Tal As Single, Optional Radianer As Boolean = True) As Single
    Dim Resultat As Single, Grader As Single
   
    Resultat = Atn(Tal)
    If Radianer = True Then
        ArcTan = Resultat
    Else
        ArcTan = Resultat * (180 / PI)
    End If
End Function

Public Function RadTilGrad(Radianer As Single) As Single
    RadTilGrad = Radianer * PI / 180
End Function

Public Function GradTilRad(Grader As Single) As Single
    GradTilRad = Grader * 180 / PI
End Function
'---------------

Således skal det gøres :D
Hvis du ofte laver mat-programmer, kan du jo gemme modulet under "...VB98\Templates\Modules", for så kan du vælge modulet under "Add Module".
-Sion
Avatar billede nmh Nybegynder
26. februar 2004 - 13:53 #20
sion>> Du skal lige sørge for at behandle -1 specielt. Ellers bliver der divideret med 0.
Avatar billede dennism Nybegynder
28. februar 2004 - 17:42 #21
Hmm..
Jeg sidder og roder lige med at lave en asin og en acos funktion.

Min asin funktion ser ud som følgende:

Function math_asin(x)
    If x > -1 And x < 1 Then
        math_asin = (Atn(x / Sqr(1 - x * x))) * 4 * Atn(1) / 180
    ElseIf x = -1 Then
        math_asin = (-2 * Atn(1)) * 4 * Atn(1) / 180
    ElseIf x = 1 Then
        math_asin = (2 * Atn(1)) * 4 * Atn(1) / 180
  End If
End Function

Jeg har sat "* 4 * Atn(1) / 180" ind for at få det i grader. Indsætter jeg f.eks. 0,5 som x-værdi, får jeg et facit på 9.1385

Hvor er fejlen?
Avatar billede dennism Nybegynder
28. februar 2004 - 18:43 #22
Jeg har nu lavet en Arccosin funktion istedet:

Function math_acosin(x)
    If x > 0 And x < 1 Then
        math_acosin = (Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)) * (180 / PI)
    ElseIf x = 0 Then
        math_acosin = (PI / 2) * (180 / PI)
    ElseIf x >= -1 And x < 0 Then
        math_acosin = (PI - Atn(Sqr(1 / (x * x) - 1))) * (180 / PI)
    End If
End Function

Den omregner også fra radianer til grader. Er der nogen fejl i denne?
Avatar billede dennism Nybegynder
28. februar 2004 - 18:43 #23
.. Skal der ik ske noget hvis x er 1 i min acosin funktion?

Har brugt vejledning fra nmh 00:27:20
Avatar billede nmh Nybegynder
28. februar 2004 - 21:04 #24
Jo både x=-1 og 1 kræver særbehandling. Jeg glemte x=1.
Sådan kan det f.eks. laves:

const pi=3.14159265358979
Function math_acosin(x)
    If x >= 0 And x < 1 Then
        math_acosin = (Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)) * (180 / PI)
    ElseIf x > -1 And x < 0 Then
        math_acosin = (PI - Atn(Sqr(1 / (x * x) - 1))) * (180 / PI)
    ElseIf x=1 then
        math_acosin=0
    ElseIf x=-1 then
        math_acosin=pi       
    End If
End Function
Avatar billede dennism Nybegynder
28. februar 2004 - 21:40 #25
nmh >>

Hvis x=1 er det så ikke en ugyldig trekant?
Avatar billede dennism Nybegynder
28. februar 2004 - 21:44 #26
Hvad med min sin^-1:

Function math_arcsin(x)
    If x < 1 And x > -1 Then
        math_arcsin = (Atn(x / Sqr(1 - x * x))) * (180 / PI)
    ElseIf x = 1 Then
        math_arcsin = (PI / 2) * (180 / PI)
    ElseIf x = -1 Then
        math_arcsin = (-PI / 2) * (180 / PI)
    End If
End Function


Er den matematisk korrekt?
Avatar billede nmh Nybegynder
28. februar 2004 - 21:47 #27
Jo i en trkant er en vinkel aldrig 0.
Men Arccos(1) defineres til 0, da cos(0) er 1.
Arccos er den omvendte funktion til cos, og er
defineret i intervallet [-1;1] og antager værdier fra pi ned til 0.
Avatar billede nmh Nybegynder
28. februar 2004 - 21:50 #28
Jo, det er helt rigtigt.
Men du bør erstatte (PI / 2) * (180 / PI)
med 90
og
-(PI / 2) * (180 / PI) erstattes med -90.
Der er jo ikke nogen grund til at bede maskinen udregne (pi/2)*(180/pi) da dette udtryk jo blot er en måde at skrive 90 på.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester