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