Angles: Difference between revisions
(created page) |
(added half angles (still incomplete)) |
||
Line 1: | Line 1: | ||
== a == |
== a == |
||
The Player's yaw (facing) is a '''float''' (from <math>-180.0</math> to <math>180.0</math>) |
The Player's yaw (facing) is a '''float''' (from <math display="inline">-180.0</math> to <math display="inline">180.0</math>) |
||
An angle is an '''integer''' (from <math>0</math> to<math>2^16</math>) |
An angle is an '''integer''' (from <math display="inline">0</math> to <math display="inline">2^{16}-1</math>) |
||
Line 8: | Line 8: | ||
⚫ | |||
== Angles and Half Angles == |
|||
⚫ | |||
This conversion induces some imprecision. |
This conversion induces some imprecision. |
||
Line 29: | Line 33: | ||
return SIN_TABLE[(int)(value * 10430.378F + 16384.0F) & 65535]; |
return SIN_TABLE[(int)(value * 10430.378F + 16384.0F) & 65535]; |
||
} |
} |
||
static |
static |
||
Line 38: | Line 43: | ||
} |
} |
||
} |
} |
||
</syntaxhighlight>'''Note:''' "& 65535" is the same as "% 65536", which is the remainder of a division by 65536 ( <math>2^{16}</math>) |
|||
</syntaxhighlight><br /> |
|||
<br />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(). |
|||
[[File:Half angle visualized.png|none|thumb|582x582px|Two consecutive angles (30237 and 30238) and a positive half angle in between.]] |
|||
'''Note:''' Fast Math is an Optifine feature that reduces the number of angles to 4096 ( <math>2^{12}</math>) |
Revision as of 18:11, 22 February 2020
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 ( )