Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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