Funkcje trygonometryczne

ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

Posiadam tablicę funkcji trygonometrycznych dla wszystkich kątów opisanych liczbą naturalną w skali od 0 do 90. Jak wyliczyć np. funkcję sinus z 35.673 stopni?

Wpadłem na mniej-więcej taki pseudokod:

Kopiuj
float kąt = 35.673;
float sinA = 0.5736; //dla kąta 35
float sinB = 0.5878; //dla kąta 36
float sinC = sinA + ((sinB - sinA) * (kąt % 1)); //dla kąta 35.673

Czyli:

  1. Pobieram wartość funkcji sinus dla najbliższych całkowitych funkcji kąta
  2. Wyliczam różnicę między funkcjami
  3. Mnożę przez część dziesiętną kąta
  4. Wynik dodaję do sinusa mniejszego kąta

Moje pytania:

  • Czy podany przeze mnie algorytm jest poprawny
  • Czy całość da się jakoś skrócić?
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Jak wyliczyć np. funkcję sinus z 35.673 stopni?

Math.Sin(35.673), ale zapewne nie o to Ci chodzi ;]


Czy podany przeze mnie algorytm jest poprawny

Nie istnieje modulo z liczb(y) zmiennoprzecinkowej(/-ych). istnieje, mea culpa.

WW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Jeżeli zależy Ci bardziej na czasie, niż dokładności obliczeń, mógłbyś spróbować z funkcją wielomianową, która dla przedziału <0,1> daje to co sin<0, PI>. Trzeba by było po przeliczać trochę argumenty, uwzględnić kąty z innych ćwiartek, ale prawdopodobnie można by było obliczać przybliżone wartości szybciej niż zwykłym sin z cmath.

user image
user image

Ponoć dokładność jest obarczona błędem 0.1%.

Twój sposób jest porządku do szacowania wartości(jeżeli %1 oznacza wydobycie części ułamkowej z liczby), ale mniej na uwadze że są to wartości mocno przybliżone, zwłaszcza, że dokładność twoich danych to 3-4 miejsca po przecinku.

  • Rejestracja: dni
  • Ostatnio: dni
0

@ShookTea, algorytm jest kiepski.
@Patryk27

Nie istnieje modulo z liczb(y) zmiennoprzecinkowej(/-ych).
W Javie istnieje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.