|
/**
** Convert direction to heading.
**
** @param delta_x Delta X.
** @param delta_y Delta Y.
**
** @return Angle (0..255)
*/
int DirectionToHeading(int delta_x, int delta_y)
{
//
// Check which quadrant.
//
if (delta_x > 0) {
if (delta_y < 0) { // Quadrant 1?
return myatan((delta_x * 64) / -delta_y);
}
// Quadrant 2?
return myatan((delta_y * 64) / delta_x) + 64;
}
if (delta_y>0) { // Quadrant 3?
return myatan((delta_x * -64) / delta_y) + 64 * 2;
}
if (delta_x) { // Quadrant 4.
return myatan((delta_y * -64) / -delta_x) + 64 * 3;
}
return 0;
}
myatan 方法如下
/**
** Fast arc tangent function.
**
** @param val atan argument
**
** @return atan(val)
*/
static int myatan(int val)
{
static int init;
static unsigned char atan_table[2608];
if (val >= 2608) {
return 63;
}
if (!init) {
for (; init < 2608; ++init) {
atan_table[init] =
(unsigned char)(atan((double)init / 64) * (64 * 4 / 6.2831853));
}
}
return atan_table[val];
}
特别是第二个方法做什么用的!谢谢... |
|