freetype2/include/freetype/fttrigon.h

266 lines
6.7 KiB
C
Raw Normal View History

/***************************************************************************/
/* */
/* 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 */