/***************************************************************************/ /* */ /* fttrigon.h */ /* */ /* FreeType trigonometric functions (specification). */ /* */ /* Copyright 2001 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ /* this file you indicate that you have read the license and */ /* understand and accept it fully. */ /* */ /***************************************************************************/ #ifndef __FTTRIGON_H__ #define __FTTRIGON_H__ #include FT_FREETYPE_H FT_BEGIN_HEADER /*************************************************************************** * * @section: * computations * */ /*************************************************************************** * * @type: * FT_Angle * * @description: * This type is used to model angle values in FreeType. Note that * the angle is a 16.16 fixed float value expressed in degrees. */ typedef FT_Fixed FT_Angle; /*************************************************************************** * * @macro: * FT_ANGLE_PI * * @description: * The angle pi expressed in @FT_Angle units. */ #define FT_ANGLE_PI ( 180L << 16 ) /*************************************************************************** * * @macro: * FT_ANGLE_2PI * * @description: * The angle 2*pi expressed in @FT_Angle units. */ #define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) /*************************************************************************** * * @macro: * FT_ANGLE_PI2 * * @description: * The angle pi/2 expressed in @FT_Angle units. */ #define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) /*************************************************************************** * * @macro: * FT_ANGLE_PI4 * * @description: * The angle pi/4 expressed in @FT_Angle units. */ #define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) /*************************************************************************** * * @function: * FT_Sin * * @description: * Return the sinus of a given angle in fixed point format. * * @input: * angle :: The input angle. * * @return: * The sinus value. * * @note: * If you need both the sinus and cosinus for a given angle, use the * function @FT_Vector_Unit. */ FT_EXPORT( FT_Fixed ) FT_Sin( FT_Angle angle ); /*************************************************************************** * * @function: * FT_Cos * * @description: * Return the cosinus of a given angle in fixed point format. * * @input: * angle :: The input angle. * * @return: * The cosinus value. * * @note: * If you need both the sinus and cosinus for a given angle, use the * function @FT_Vector_Unit. */ FT_EXPORT( FT_Fixed ) FT_Cos( FT_Angle angle ); /*************************************************************************** * * @function: * FT_Tan * * @description: * Return the tangent of a given angle in fixed point format. * * @input: * angle :: The input angle. * * @return: * The tangent value. */ FT_EXPORT( FT_Fixed ) FT_Tan( FT_Angle angle ); /*************************************************************************** * * @function: * FT_Atan2 * * @description: * Return the arc-tangent corresponding to a given vector (x,y) in * the 2d plane. * * @input: * x :: The horizontal vector coordinate. * y :: The vertical vector coordinate. * * @return: * The arc-tangent value (i.e. angle). */ FT_EXPORT( FT_Angle ) FT_Atan2( FT_Fixed x, FT_Fixed y ); /*************************************************************************** * * @function: * FT_Vector_Unit * * @description: * Return the unit vector corresponding to a given angle. After the call, * the value of "vec.x" will be "sin(theta)", and the value of "vec.y" * will be "cos(angle)". * * This function is useful to retrieve both the sinus and cosinus of a * given angle quickly. * * @input: * vec :: The address of target vector. * angle :: The address of angle. */ FT_EXPORT( void ) FT_Vector_Unit( FT_Vector* vec, FT_Angle angle ); /*************************************************************************** * * @function: * FT_Vector_Rotate * * @description: * Rotate a vector by a given angle. * * @input: * vec :: The address of target vector. * angle :: The address of angle. */ FT_EXPORT( void ) FT_Vector_Rotate( FT_Vector* vec, FT_Angle angle ); /*************************************************************************** * * @function: * FT_Vector_Length * * @description: * Return the length of a given vector. * * @input: * vec :: The address of target vector. * * @return: * The vector length, expressed in the same units that the original * vector coordinates. */ FT_EXPORT( FT_Fixed ) FT_Vector_Length( FT_Vector* vec ); /*************************************************************************** * * @function: * FT_Vector_Normalize * * @description: * Normalize a given vector (i.e. compute the equivalent unit vector). * * @input: * vec :: The address of target vector. */ FT_EXPORT( void ) FT_Vector_Normalize( FT_Vector* vec ); /*************************************************************************** * * @function: * FT_Vector_Polarize * * @description: * Compute both the length and angle of a given vector. * * @input: * vec :: The address of source vector. * * @output: * length :: The vector length. * angle :: The vector angle. */ FT_EXPORT( void ) FT_Vector_Polarize( FT_Vector* vec, FT_Fixed *length, FT_Angle *angle ); /* */ FT_END_HEADER #endif /* __FTTRIGON_H__ */ /* END */