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