266 lines
6.7 KiB
C
266 lines
6.7 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* 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 */
|