Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 154 → Rev 155

/branches/salvo_gps/math.c
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;
}