shithub: freetype+ttf2subf

ref: b181ae1ac148414d6c7c6afb2c0a8eae1dd8566e
dir: /include/freetype/fttrigon.h/

View raw version
/***************************************************************************/
/*                                                                         */
/*  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 */