Brze (priblizne) trig funkcije

Brze (priblizne) trig funkcije

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Interesuje me da li znate za neku dobru implementaciju sin/cos funkcija koja je brza od standarnih? Ne mora da bude mnogo precizno posto bih koristio za simulaciju cestica (particle systems) u video igri, njihov broj moze biti relativno velik a ove operacije su veoma skupe.

Hvala na izdvojenom vremenu.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Možda primenom iterativnog postupka:



Dakle, potrebne su ti tri promenljive, jedna za prethodnu vrednost (Ap), druga za narednu vrednost An i treća za tačnost (E). Imaš jedan uslov, petlja treba da se izvršava sve dok je |An-Ap| > E.
Dakle, ako sam definišeš tačnost, dobićeš tu određenu tačnost, ali sam manjim brojem iteracija. Recimo, ako staviš da je tačnost E=10^-3, dobijaš tačnost na tri decimale.


E sad, nisam siguran koliko bi i da li bi ovaj postupak bio brži od standardnih funkcija, ali bi trebalo.



offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Nasao sam nesto ovde.

float fast_sin(float rad) {    float sin = rad;    // wrap around    if (rad < -3.14159265f)       rad += 6.28318531f;    else if (rad >  3.14159265f)       rad -= 6.28318531f;    if (rad < 0.0f)       sin = 1.27323954f * rad + 0.405284735f * rad * rad;    else       sin = 1.27323954f * rad - 0.405284735f * rad * rad;    return sin; } float fast_cos(float rad) {    float cos = rad;    rad += 1.57079632f;    if (rad >  3.14159265f)       rad -= 6.28318531f;    if (rad < 0)       cos = 1.27323954f * rad + 0.405284735f * rad * rad;    else        cos = 1.27323954f * rad - 0.405284735f * rad * rad;    return cos; }

Probao, i izgleda sasvim dobro kao i sa standardnim funkcijama. Nisam profilisao ali verujem da je brze.

Ko je trenutno na forumu
 

Ukupno su 986 korisnika na forumu :: 25 registrovanih, 1 sakriven i 960 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: amstel, babaroga, Bobrock1, brundo65, cemix, Djordje29, DonRumataEstorski, Futog 74, ILGromovnik, Kriglord, krkalon, LUDI, m0nstrum_, milenko crazy north, Mixelotti, mkukoleca, paja69, Parker, pein, powSrb, sabros, Shilok, slonic_tonic, sovanova95, tubular