a
This commit is contained in:
140
libdraw/icossin.c
Normal file
140
libdraw/icossin.c
Normal file
@ -0,0 +1,140 @@
|
||||
#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];
|
||||
}
|
Reference in New Issue
Block a user