xref: /plan9/sys/src/cmd/unix/drawterm/libdraw/icossin.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include	<u.h>
2*8ccd4a63SDavid du Colombier #include	<libc.h>
3*8ccd4a63SDavid du Colombier #include	<draw.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier /*
67dd7cddfSDavid du Colombier  * Integer sine and cosine for integral degree argument.
77dd7cddfSDavid du Colombier  * Tables computed by (sin,cos)(PI*d/180).
87dd7cddfSDavid du Colombier  */
97dd7cddfSDavid du Colombier static short sinus[91] = {
107dd7cddfSDavid du Colombier 	0,	/* 0 */
117dd7cddfSDavid du Colombier 	18,	/* 1 */
127dd7cddfSDavid du Colombier 	36,	/* 2 */
137dd7cddfSDavid du Colombier 	54,	/* 3 */
147dd7cddfSDavid du Colombier 	71,	/* 4 */
157dd7cddfSDavid du Colombier 	89,	/* 5 */
167dd7cddfSDavid du Colombier 	107,	/* 6 */
177dd7cddfSDavid du Colombier 	125,	/* 7 */
187dd7cddfSDavid du Colombier 	143,	/* 8 */
197dd7cddfSDavid du Colombier 	160,	/* 9 */
207dd7cddfSDavid du Colombier 	178,	/* 10 */
217dd7cddfSDavid du Colombier 	195,	/* 11 */
227dd7cddfSDavid du Colombier 	213,	/* 12 */
237dd7cddfSDavid du Colombier 	230,	/* 13 */
247dd7cddfSDavid du Colombier 	248,	/* 14 */
257dd7cddfSDavid du Colombier 	265,	/* 15 */
267dd7cddfSDavid du Colombier 	282,	/* 16 */
277dd7cddfSDavid du Colombier 	299,	/* 17 */
287dd7cddfSDavid du Colombier 	316,	/* 18 */
297dd7cddfSDavid du Colombier 	333,	/* 19 */
307dd7cddfSDavid du Colombier 	350,	/* 20 */
317dd7cddfSDavid du Colombier 	367,	/* 21 */
327dd7cddfSDavid du Colombier 	384,	/* 22 */
337dd7cddfSDavid du Colombier 	400,	/* 23 */
347dd7cddfSDavid du Colombier 	416,	/* 24 */
357dd7cddfSDavid du Colombier 	433,	/* 25 */
367dd7cddfSDavid du Colombier 	449,	/* 26 */
377dd7cddfSDavid du Colombier 	465,	/* 27 */
387dd7cddfSDavid du Colombier 	481,	/* 28 */
397dd7cddfSDavid du Colombier 	496,	/* 29 */
407dd7cddfSDavid du Colombier 	512,	/* 30 */
417dd7cddfSDavid du Colombier 	527,	/* 31 */
427dd7cddfSDavid du Colombier 	543,	/* 32 */
437dd7cddfSDavid du Colombier 	558,	/* 33 */
447dd7cddfSDavid du Colombier 	573,	/* 34 */
457dd7cddfSDavid du Colombier 	587,	/* 35 */
467dd7cddfSDavid du Colombier 	602,	/* 36 */
477dd7cddfSDavid du Colombier 	616,	/* 37 */
487dd7cddfSDavid du Colombier 	630,	/* 38 */
497dd7cddfSDavid du Colombier 	644,	/* 39 */
507dd7cddfSDavid du Colombier 	658,	/* 40 */
517dd7cddfSDavid du Colombier 	672,	/* 41 */
527dd7cddfSDavid du Colombier 	685,	/* 42 */
537dd7cddfSDavid du Colombier 	698,	/* 43 */
547dd7cddfSDavid du Colombier 	711,	/* 44 */
557dd7cddfSDavid du Colombier 	724,	/* 45 */
567dd7cddfSDavid du Colombier 	737,	/* 46 */
577dd7cddfSDavid du Colombier 	749,	/* 47 */
587dd7cddfSDavid du Colombier 	761,	/* 48 */
597dd7cddfSDavid du Colombier 	773,	/* 49 */
607dd7cddfSDavid du Colombier 	784,	/* 50 */
617dd7cddfSDavid du Colombier 	796,	/* 51 */
627dd7cddfSDavid du Colombier 	807,	/* 52 */
637dd7cddfSDavid du Colombier 	818,	/* 53 */
647dd7cddfSDavid du Colombier 	828,	/* 54 */
657dd7cddfSDavid du Colombier 	839,	/* 55 */
667dd7cddfSDavid du Colombier 	849,	/* 56 */
677dd7cddfSDavid du Colombier 	859,	/* 57 */
687dd7cddfSDavid du Colombier 	868,	/* 58 */
697dd7cddfSDavid du Colombier 	878,	/* 59 */
707dd7cddfSDavid du Colombier 	887,	/* 60 */
717dd7cddfSDavid du Colombier 	896,	/* 61 */
727dd7cddfSDavid du Colombier 	904,	/* 62 */
737dd7cddfSDavid du Colombier 	912,	/* 63 */
747dd7cddfSDavid du Colombier 	920,	/* 64 */
757dd7cddfSDavid du Colombier 	928,	/* 65 */
767dd7cddfSDavid du Colombier 	935,	/* 66 */
777dd7cddfSDavid du Colombier 	943,	/* 67 */
787dd7cddfSDavid du Colombier 	949,	/* 68 */
797dd7cddfSDavid du Colombier 	956,	/* 69 */
807dd7cddfSDavid du Colombier 	962,	/* 70 */
817dd7cddfSDavid du Colombier 	968,	/* 71 */
827dd7cddfSDavid du Colombier 	974,	/* 72 */
837dd7cddfSDavid du Colombier 	979,	/* 73 */
847dd7cddfSDavid du Colombier 	984,	/* 74 */
857dd7cddfSDavid du Colombier 	989,	/* 75 */
867dd7cddfSDavid du Colombier 	994,	/* 76 */
877dd7cddfSDavid du Colombier 	998,	/* 77 */
887dd7cddfSDavid du Colombier 	1002,	/* 78 */
897dd7cddfSDavid du Colombier 	1005,	/* 79 */
907dd7cddfSDavid du Colombier 	1008,	/* 80 */
917dd7cddfSDavid du Colombier 	1011,	/* 81 */
927dd7cddfSDavid du Colombier 	1014,	/* 82 */
937dd7cddfSDavid du Colombier 	1016,	/* 83 */
947dd7cddfSDavid du Colombier 	1018,	/* 84 */
957dd7cddfSDavid du Colombier 	1020,	/* 85 */
967dd7cddfSDavid du Colombier 	1022,	/* 86 */
977dd7cddfSDavid du Colombier 	1023,	/* 87 */
987dd7cddfSDavid du Colombier 	1023,	/* 88 */
997dd7cddfSDavid du Colombier 	1024,	/* 89 */
1007dd7cddfSDavid du Colombier 	1024,	/* 90 */
1017dd7cddfSDavid du Colombier };
1027dd7cddfSDavid du Colombier 
1037dd7cddfSDavid du Colombier void
icossin(int deg,int * cosp,int * sinp)1047dd7cddfSDavid du Colombier icossin(int deg, int *cosp, int *sinp)
1057dd7cddfSDavid du Colombier {
1067dd7cddfSDavid du Colombier 	int sinsign, cossign;
1077dd7cddfSDavid du Colombier 	short *stp, *ctp;
1087dd7cddfSDavid du Colombier 
1097dd7cddfSDavid du Colombier 	deg %= 360;
1107dd7cddfSDavid du Colombier 	if(deg < 0)
1117dd7cddfSDavid du Colombier 		deg += 360;
1127dd7cddfSDavid du Colombier 	sinsign = 1;
1137dd7cddfSDavid du Colombier 	cossign = 1;
1147dd7cddfSDavid du Colombier 	stp = 0;
1157dd7cddfSDavid du Colombier 	ctp = 0;
1167dd7cddfSDavid du Colombier 	switch(deg/90){
1177dd7cddfSDavid du Colombier 	case 2:
1187dd7cddfSDavid du Colombier 		sinsign = -1;
1197dd7cddfSDavid du Colombier 		cossign = -1;
1207dd7cddfSDavid du Colombier 		deg -= 180;
1217dd7cddfSDavid du Colombier 		/* fall through */
1227dd7cddfSDavid du Colombier 	case 0:
1237dd7cddfSDavid du Colombier 		stp = &sinus[deg];
1247dd7cddfSDavid du Colombier 		ctp = &sinus[90-deg];
1257dd7cddfSDavid du Colombier 		break;
1267dd7cddfSDavid du Colombier 	case 3:
1277dd7cddfSDavid du Colombier 		sinsign = -1;
1287dd7cddfSDavid du Colombier 		cossign = -1;
1297dd7cddfSDavid du Colombier 		deg -= 180;
1307dd7cddfSDavid du Colombier 		/* fall through */
1317dd7cddfSDavid du Colombier 	case 1:
1327dd7cddfSDavid du Colombier 		deg = 180-deg;
1337dd7cddfSDavid du Colombier 		cossign = -cossign;
1347dd7cddfSDavid du Colombier 		stp = &sinus[deg];
1357dd7cddfSDavid du Colombier 		ctp = &sinus[90-deg];
1367dd7cddfSDavid du Colombier 		break;
1377dd7cddfSDavid du Colombier 	}
1387dd7cddfSDavid du Colombier 	*sinp = sinsign*stp[0];
1397dd7cddfSDavid du Colombier 	*cosp = cossign*ctp[0];
1407dd7cddfSDavid du Colombier }
141