Blame


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