Snabb atan2 med integers
Postat: 4 april 2012, 14:20:02
Jag har ett algoritm som behöver göra många atan2 beräkningar på kort tid.
Jag använder GCC till en 32 bits ARM9 processor och mattebiblioteket har endast double atan2(double X, double Y) vilket följaktligen tar lång tid eftersom processorn måste jobba med doubles.
Jag behöver en snabb atan2 som använder integers istället.
Processorn har varken flyttal eller hårdvarudivision, så helst skulle man undvika detta. Därmot har den mycket RAM/flash så ett lockuptable med någon form av approximering mellan elementen skulle kunna fungera.
Helst skulle jag behöva en upplösning på grader med 5 decimaler men då multiplicerat med en ex 100000 för att slippa float och double. Dvs när atan2 returnerar 9123540 så betyder det 91.23450 grader.
Så det jag är ute efter är
int angle = atan(int X, int Y) //Returnerar grader * 100000
int angleDegrees = angle/100000; //Omvandla till hela grader
En optimerad assembler funktion vore givetvis bra, men annars C-kod för integer funkar också.
Tips på detta?
Jag använder GCC till en 32 bits ARM9 processor och mattebiblioteket har endast double atan2(double X, double Y) vilket följaktligen tar lång tid eftersom processorn måste jobba med doubles.
Jag behöver en snabb atan2 som använder integers istället.
Processorn har varken flyttal eller hårdvarudivision, så helst skulle man undvika detta. Därmot har den mycket RAM/flash så ett lockuptable med någon form av approximering mellan elementen skulle kunna fungera.
Helst skulle jag behöva en upplösning på grader med 5 decimaler men då multiplicerat med en ex 100000 för att slippa float och double. Dvs när atan2 returnerar 9123540 så betyder det 91.23450 grader.
Så det jag är ute efter är
int angle = atan(int X, int Y) //Returnerar grader * 100000
int angleDegrees = angle/100000; //Omvandla till hela grader
En optimerad assembler funktion vore givetvis bra, men annars C-kod för integer funkar också.
Tips på detta?