282 lines
17 KiB
C
282 lines
17 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(angle)', 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. */
|
|
/* */
|
|
/* @output: */
|
|
/* vec :: The address of target vector. */
|
|
/* */
|
|
/* @input: */
|
|
/* 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. */
|
|
/* */
|
|
/* @inout: */
|
|
/* vec :: The address of target vector. */
|
|
/* */
|
|
/* @input: */
|
|
/* 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). */
|
|
/* */
|
|
/* @inout: */
|
|
/* 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 */
|