| /**************************************************************************** |
| * |
| * fttrigon.h |
| * |
| * FreeType trigonometric functions (specification). |
| * |
| * Copyright (C) 2001-2022 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 <freetype/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 `angle2-angle1`. |
| * |
| */ |
| 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 */ |