Angles
a
The Player's yaw (facing) is a float (from to )
An angle is an integer (from to )
A single angle spans approximately 0.0055°
Angles and Half Angles
Minecraft uses angles for movement calculations, which means the Player's yaw has to be converted before being usable.
This conversion induces some imprecision.
Trigonometric functions: (from MathHelper):
public class MathHelper
{
private static final float[] SIN_TABLE = new float[65536];
public static float sin(float value)
{
return SIN_TABLE[(int)(value * 10430.378F) & 65535];
}
public static float cos(float value)
{
return SIN_TABLE[(int)(value * 10430.378F + 16384.0F) & 65535];
}
static
{
for (int i = 0; i < 65536; ++i)
{
SIN_TABLE[i] = (float)Math.sin((double)i * Math.PI * 2.0D / 65536.0D);
}
}
}
Note: "& 65535" is the same as "% 65536", which is the remainder of a division by 65536 ( )
By analyzing the sin() and cos() function from the source code, we can notice [...]
That's because floats are rather imprecise for larger values.
Half angles are specific values for which the corresponding angle are interpreted differently by cos() and sin().
Note: Fast Math is an Optifine feature that reduces the number of angles to 4096 ( )