16,21 → 16,48 |
Stand 11.9.2007 |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
*/ |
#include "main.h" |
|
|
// arctan Funktion: Eingabewert x,y Rueckgabe =arctan(x,y) in grad |
signed int arctan_i(signed int x, signed int y) |
int arctan_i(long signed int x, long signed int y) |
{ |
short int sign = 0; |
short int change_xy = 0; |
signed int i; |
long signed int wert; |
int return_value; |
|
if (y > x) // x,y Werte vertauschen |
if ((abs(x)) > (abs(y))) // x,y Werte vertauschen damit arctan <45 grad bleibt |
{ |
sign = 1; |
i = x; |
x = y; |
y = i; |
change_xy = 1; |
i = x; |
x = y; |
y = i; |
} |
|
// Quadranten ermitteln |
|
// Wert durch lineare Interpolation ermitteln |
wert= abs((x*1000)/y); |
|
if (wert <=268) //0...0.0,268 entsprechend 0..15 Grad |
{ |
return_value = (int)((wert*100)/(268-0)*(15-0)/100) +0; |
} |
else if (wert <=578) //0,268...0.0,568 entsprechend 15..30 Grad |
{ |
return_value = (int)((((wert-268)*100)/(578-268)*(30-15))/100) +15; |
} |
else //0,568...1 entsprechend 30..45 Grad |
{ |
return_value = (int)((((wert-578)*50)/(1000-578)*(45-30))/50) +30; |
} |
|
if (change_xy > 0) return_value = 90-return_value; //Quadrant 45..90 Grad |
if ((x > 0) && (y <0)) return_value = - return_value; |
else if ((x < 0) && (y > 0)) return_value = - return_value; |
|
return return_value; |
} |
|
|