Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: arcsin i arccos
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004
arcsin i arccos

Czy ktoś wie, jak w VB uzyskać funkcje arcsin i arccos? W MSDN podają jak, ale to zupełnie nie działa (czyżby MS znowu gdzieś się pomylił ).

Podaję tutaj przykład z MSDN:
arcsin(x) = Atn(x / Sqr(-x * x + 1))
arccos(x) = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)

Może to nie problem VB, ale jednocześnie spytam, czy ktoś zna jakiś algorytm wyciągania pierwiastków przy pomocy czterech podstawowych funkcji arytmetycznych (+,-,*,/) i modulo.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-06-2004 10:14
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Żeby to zadziałało, należy najpierw zamienić x na zakres liczb 0 - 1, tak jak zwraca sin/cos.

'W pewnych wypadkach występuje pierwiastkowanie liczby ujemnej, a warunki If za funkcjami Arcsin i Arccos usuwają ten błąd.

On Error Resume Next
'Obliczanie promienia
r = Sqr(X1 ^ 2 + Y1 ^ 2)

X1 = X1 / r
Y1 = Y1 / r

'Do funkcji dodałem kilka warunków _
i nie ma już wyjątków w jej działaniu (chyba)
a = Atn(X1 / Sqr(-X1 * X1 + 1))
If Y1 < 0 Then a = pi - a
If X1 = 1 Then a = pi / 2
If X1 = -1 Then a = pi / 2 * 3

b = Atn(-Y2 / Sqr(-Y2 * Y2 + 1)) + 2 * Atn(1)
If X2 < 0 Then b = pi - b - pi
If X2 = 0 And Y2 = -1 Then b = b - pi

Wynik podawany jest w radianach


_____________________________________________
www.mob.abc.pl - moja strona o VB

28-06-2004 11:25
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Właściwie dałeś mi ten sam wzór MSDN .

Ale już wiem, gdzie leżał błąd. Częściowo leżał on po mojej stronie. Nie skojarzyłem, że arcsin ma sens tylko dla sinusów kątów od -pi/2 do pi/2. A ja mu dawałem np. kąt 2...
Druga rzecz to niedokładność funkcji sin. Właściwie to nie jej wina, ale gdy da się jej np. kąt pi, to zwraca około 1.12e-16. Blisko zera, ale ponieważ pi nie było równe pi, to i wynik nie będzie równy 0.
Jeśli obydwie sprawy się zsumuje, to nie ma wątpliwości, dlaczego arcsin(sin(2)) wychodził mi ~1.41 .

Dzięki za pomoc.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-06-2004 12:01
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 2 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1