summaryrefslogtreecommitdiff
path: root/ihl/utils/IHLMathUtils.java
blob: cfd6931c62543cbd32800f1e8448ac4eda5d38a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package ihl.utils;

public class IHLMathUtils 
{
	private final static int accuracy_level=65536;
	private static float[] sin_table=new float[accuracy_level];
	private static float[] atan_table=new float[accuracy_level];
	private final static float PI=(float)Math.PI;
	
	public static float sin(float angle)
	{
		float angle1 = angle % (2*PI);
		if(angle1<0)
		{
			angle1+=2*PI;
		}
		return sin_table[(int)(angle1*accuracy_level/2/PI)];
	}
	
	public static float atan(float tan_value)
	{
		if(tan_value<-32f)
		{
			return -1.54f;
		}
		else if(tan_value>32f)
		{
			return 1.54f;
		}
		else
		{
			return atan_table[(int)((tan_value+32f)*accuracy_level/64f)];
		}
	}

	
	static
	{
		for(int i=0;i<accuracy_level;i++)
		{
			sin_table[i]=(float) Math.sin(2d*Math.PI*i/accuracy_level);
		}
		for(int i=0;i<accuracy_level;i++)
		{
			atan_table[i]=(float) Math.atan(-32d+64d*i/accuracy_level);
		}
	}
}