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