Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature-vt/sys/src/libdraw/icossin.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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