123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #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];
- }
|