#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
/* | |
* Integer sine and cosine for integral degree argument. | |
* Tables computed by (sin,cos)(PI*d/180). | |
*/ | |
static short sinus[91] = { | |
0, /* 0 */ | |
18, /* 1 */ | |
36, /* 2 */ | |
54, /* 3 */ | |
71, /* 4 */ | |
89, /* 5 */ | |
107, /* 6 */ | |
125, /* 7 */ | |
143, /* 8 */ | |
160, /* 9 */ | |
178, /* 10 */ | |
195, /* 11 */ | |
213, /* 12 */ | |
230, /* 13 */ | |
248, /* 14 */ | |
265, /* 15 */ | |
282, /* 16 */ | |
299, /* 17 */ | |
316, /* 18 */ | |
333, /* 19 */ | |
350, /* 20 */ | |
367, /* 21 */ | |
384, /* 22 */ | |
400, /* 23 */ | |
416, /* 24 */ | |
433, /* 25 */ | |
449, /* 26 */ | |
465, /* 27 */ | |
481, /* 28 */ | |
496, /* 29 */ | |
512, /* 30 */ | |
527, /* 31 */ | |
543, /* 32 */ | |
558, /* 33 */ | |
573, /* 34 */ | |
587, /* 35 */ | |
602, /* 36 */ | |
616, /* 37 */ | |
630, /* 38 */ | |
644, /* 39 */ | |
658, /* 40 */ | |
672, /* 41 */ | |
685, /* 42 */ | |
698, /* 43 */ | |
711, /* 44 */ | |
724, /* 45 */ | |
737, /* 46 */ | |
749, /* 47 */ | |
761, /* 48 */ | |
773, /* 49 */ | |
784, /* 50 */ | |
796, /* 51 */ | |
807, /* 52 */ | |
818, /* 53 */ | |
828, /* 54 */ | |
839, /* 55 */ | |
849, /* 56 */ | |
859, /* 57 */ | |
868, /* 58 */ | |
878, /* 59 */ | |
887, /* 60 */ | |
896, /* 61 */ | |
904, /* 62 */ | |
912, /* 63 */ | |
920, /* 64 */ | |
928, /* 65 */ | |
935, /* 66 */ | |
943, /* 67 */ | |
949, /* 68 */ | |
956, /* 69 */ | |
962, /* 70 */ | |
968, /* 71 */ | |
974, /* 72 */ | |
979, /* 73 */ | |
984, /* 74 */ | |
989, /* 75 */ | |
994, /* 76 */ | |
998, /* 77 */ | |
1002, /* 78 */ | |
1005, /* 79 */ | |
1008, /* 80 */ | |
1011, /* 81 */ | |
1014, /* 82 */ | |
1016, /* 83 */ | |
1018, /* 84 */ | |
1020, /* 85 */ | |
1022, /* 86 */ | |
1023, /* 87 */ | |
1023, /* 88 */ | |
1024, /* 89 */ | |
1024, /* 90 */ | |
}; | |
void | |
icossin(int deg, int *cosp, int *sinp) | |
{ | |
int sinsign, cossign; | |
short *stp, *ctp; | |
deg %= 360; | |
if(deg < 0) | |
deg += 360; | |
sinsign = 1; | |
cossign = 1; | |
stp = 0; | |
ctp = 0; | |
switch(deg/90){ | |
case 2: | |
sinsign = -1; | |
cossign = -1; | |
deg -= 180; | |
/* fall through */ | |
case 0: | |
stp = &sinus[deg]; | |
ctp = &sinus[90-deg]; | |
break; | |
case 3: | |
sinsign = -1; | |
cossign = -1; | |
deg -= 180; | |
/* fall through */ | |
case 1: | |
deg = 180-deg; | |
cossign = -cossign; | |
stp = &sinus[deg]; | |
ctp = &sinus[90-deg]; | |
break; | |
} | |
*sinp = sinsign*stp[0]; | |
*cosp = cossign*ctp[0]; | |
} |