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