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: 14823
  • 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 1257 korisnika na forumu :: 45 registrovanih, 4 sakrivenih i 1208 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: A.R.Chafee.Jr., ajo baba, babaroga, Belac91, Bojadin Strumski, bojcistv, bokisha253, DENIRO, djboj, Excalibur13, HrcAk47, ikan, ILGromovnik, Karla, kikisp, Koridor, Krusarac, mackenzie, Magistar78, Marko Marković, mercedesamg, mile23, milenko crazy north, Milija.00, Milometer, novator, operniki, pein, pirke96, Polemarchoi, powSrb, proka89, Rogan33, Romibrat, S-lash, sabros, samsung, SD izvidjac, Srle993, Toper, UAV operator, vathra, Vlad000, vukovi, zillbg