#include "sin.h"

int sintable[360]={
	0,
	4,
	8,
	13,
	17,
	22,
	26,
	31,
	35,
	39,
	44,
	48,
	53,
	57,
	61,
	65,
	70,
	74,
	78,
	83,
	87,
	91,
	95,
	99,
	103,
	107,
	111,
	115,
	119,
	123,
	127,
	131,
	135,
	138,
	142,
	146,
	149,
	153,
	156,
	160,
	163,
	167,
	170,
	173,
	177,
	180,
	183,
	186,
	189,
	192,
	195,
	198,
	200,
	203,
	206,
	208,
	211,
	213,
	216,
	218,
	220,
	223,
	225,
	227,
	229,
	231,
	232,
	234,
	236,
	238,
	239,
	241,
	242,
	243,
	245,
	246,
	247,
	248,
	249,
	250,
	251,
	251,
	252,
	253,
	253,
	254,
	254,
	254,
	254,
	254,
	255,
	254,
	254,
	254,
	254,
	254,
	253,
	253,
	252,
	251,
	251,
	250,
	249,
	248,
	247,
	246,
	245,
	243,
	242,
	241,
	239,
	238,
	236,
	234,
	232,
	231,
	229,
	227,
	225,
	223,
	220,
	218,
	216,
	213,
	211,
	208,
	206,
	203,
	200,
	198,
	195,
	192,
	189,
	186,
	183,
	180,
	177,
	173,
	170,
	167,
	163,
	160,
	156,
	153,
	149,
	146,
	142,
	138,
	135,
	131,
	127,
	123,
	119,
	115,
	111,
	107,
	103,
	99,
	95,
	91,
	87,
	83,
	78,
	74,
	70,
	65,
	61,
	57,
	53,
	48,
	44,
	39,
	35,
	31,
	26,
	22,
	17,
	13,
	8,
	4,
	0,
	-4,
	-8,
	-13,
	-17,
	-22,
	-26,
	-31,
	-35,
	-39,
	-44,
	-48,
	-53,
	-57,
	-61,
	-65,
	-70,
	-74,
	-78,
	-83,
	-87,
	-91,
	-95,
	-99,
	-103,
	-107,
	-111,
	-115,
	-119,
	-123,
	-127,
	-131,
	-135,
	-138,
	-142,
	-146,
	-149,
	-153,
	-156,
	-160,
	-163,
	-167,
	-170,
	-173,
	-177,
	-180,
	-183,
	-186,
	-189,
	-192,
	-195,
	-198,
	-200,
	-203,
	-206,
	-208,
	-211,
	-213,
	-216,
	-218,
	-220,
	-223,
	-225,
	-227,
	-229,
	-231,
	-232,
	-234,
	-236,
	-238,
	-239,
	-241,
	-242,
	-243,
	-245,
	-246,
	-247,
	-248,
	-249,
	-250,
	-251,
	-251,
	-252,
	-253,
	-253,
	-254,
	-254,
	-254,
	-254,
	-254,
	-255,
	-254,
	-254,
	-254,
	-254,
	-254,
	-253,
	-253,
	-252,
	-251,
	-251,
	-250,
	-249,
	-248,
	-247,
	-246,
	-245,
	-243,
	-242,
	-241,
	-239,
	-238,
	-236,
	-234,
	-232,
	-231,
	-229,
	-227,
	-225,
	-223,
	-220,
	-218,
	-216,
	-213,
	-211,
	-208,
	-206,
	-203,
	-200,
	-198,
	-195,
	-192,
	-189,
	-186,
	-183,
	-180,
	-177,
	-173,
	-170,
	-167,
	-163,
	-160,
	-156,
	-153,
	-149,
	-146,
	-142,
	-138,
	-135,
	-131,
	-127,
	-123,
	-119,
	-115,
	-111,
	-107,
	-103,
	-99,
	-95,
	-91,
	-87,
	-83,
	-78,
	-74,
	-70,
	-65,
	-61,
	-57,
	-53,
	-48,
	-44,
	-39,
	-35,
	-31,
	-26,
	-22,
	-17,
	-13,
	-8         
};

int sin(int i)
{
	while(i<0)
		i+=360;
	while(i>359)
		i-=360;
	return sintable[i];
}
int cos(int i)
{
	return sin(i+90);
}

void rotate3d(const int ax, const int ay, int &x, int &y, int& z)
{
	int x1=x;
	int y1=y*cos(ax)/256+z*sin(ax)/256;
	int z1=z*cos(ax)/256-y*sin(ax)/256;
	
	x=x1*cos(ay)/256+z1*sin(ay)/256;
	y=y1;
	z=z1*cos(ay)/256-x1*sin(ay)/256;
}

void rotate(const int az, int &x, int &y)
{
	int x1=x*cos(az)/256+y*sin(az)/256;
	int y1=y*cos(az)/256-x*sin(az)/256;
	
	x=x1;
	y=y1; 
}

void translatept(const POINT* frame, POINT& ret)
{
	int x11 = (frame[1].x-frame[0].x)*ret.x/256+frame[0].x;
	int x22 = (frame[2].x-frame[3].x)*ret.x/256+frame[3].x;
	
	int xn = (x22-x11)*ret.y/256 + x11;
	
	int y11 = (frame[1].y-frame[0].y)*ret.x/256+frame[0].y;
	int y22 = (frame[2].y-frame[3].y)*ret.x/256+frame[3].y;
	
	int yn = (y22-y11)*ret.y/256 + y11;
	
	ret.x = xn;
	ret.y = yn;
}

int getangle(int i)
{
	while(i>180)
		i-=360;
	
	while(i<-180)
		i+=360;
	
	return i;
}
