atan.
: y/x . , , /.
x (x > 0)
- (y/x) > 2.4 - = > 90 ()
- 2.4 > (y/x) > 0.4 - = > 45 (-)
- 0.4 > (y/x) > -0.4 - = > 0 ()
- -0.4 > (y/x) > -2.4 - = > -45 (-)
- -2.4 > (y/x) - = > 90 ()
x
, , :
- (x == 0 & y > 0) - = > -90 ()
- (x == 0 & y < 0) - = > 90 ()
: , (, ))
. , ( ).
input: x1, y1 = x2, y2 =
(0-7) = 0 = , 1 = -, 2 = ,... ..
int CalcDir( int x1, int y1, int x2, int y2 )
{
int dx = x2 - x1, dy = y2 - y1;
int adx = (dx<0)?-dx:dx, ady = (dy<0)?-dy:dy, r;
r=(dy>0?4:0)+(dx>0?2:0)+(adx>ady?1:0);
r=(int []){2,3,1,0,5,4,6,7}[r];
return r;
}
void CalcDirTest(){
int t = CalcDir(0, 0, 10, 1);
printf("t = %d",t);
t = CalcDir(0, 0, 9, 10);
printf("t = %d",t);
t = CalcDir(0, 0, -1, 10);
printf("t = %d",t);
t = CalcDir(0, 0, -10, 9);
printf("t = %d",t);
t = CalcDir(0, 0, -10, -1);
printf("t = %d",t);
t = CalcDir(0, 0, -9, -10);
printf("t = %d",t);
t = CalcDir(0, 0, 1, -10);
printf("t = %d",t);
t = CalcDir(0, 0, 10, -9);
printf("t = %d",t);
}
:
t = 7
t = 6
t = 5
t = 4
t = 3
t = 2
t = 1
t = 0
( , , , )