/***************************************************************************/ | |
/* */ | |
/* fttrigon.h */ | |
/* */ | |
/* FreeType trigonometric functions (specification). */ | |
/* */ | |
/* Copyright 2001-2015 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 | |
#ifdef FREETYPE_H | |
#error "freetype.h of FreeType 1 has been loaded!" | |
#error "Please fix the directory search order for header files" | |
#error "so that freetype.h of FreeType 2 is found first." | |
#endif | |
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-point 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_Angle_Diff | |
* | |
* @description: | |
* Return the difference between two angles. The result is always | |
* constrained to the ]-PI..PI] interval. | |
* | |
* @input: | |
* angle1 :: | |
* First angle. | |
* | |
* angle2 :: | |
* Second angle. | |
* | |
* @return: | |
* Constrained value of `value2-value1'. | |
* | |
*/ | |
FT_EXPORT( FT_Angle ) | |
FT_Angle_Diff( FT_Angle angle1, | |
FT_Angle angle2 ); | |
/************************************************************************* | |
* | |
* @function: | |
* FT_Vector_Unit | |
* | |
* @description: | |
* Return the unit vector corresponding to a given angle. After the | |
* call, the value of `vec.x' will be `cos(angle)', and the value of | |
* `vec.y' will be `sin(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 input 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 input 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_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 ); | |
/************************************************************************* | |
* | |
* @function: | |
* FT_Vector_From_Polar | |
* | |
* @description: | |
* Compute vector coordinates from a length and angle. | |
* | |
* @output: | |
* vec :: | |
* The address of source vector. | |
* | |
* @input: | |
* length :: | |
* The vector length. | |
* | |
* angle :: | |
* The vector angle. | |
* | |
*/ | |
FT_EXPORT( void ) | |
FT_Vector_From_Polar( FT_Vector* vec, | |
FT_Fixed length, | |
FT_Angle angle ); | |
/* */ | |
FT_END_HEADER | |
#endif /* __FTTRIGON_H__ */ | |
/* END */ |