Angles: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
(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:





Minecraft uses angles for movement calculations, which means the Player's yaw has to be converted before being used.


== 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.
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().

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 ( )