Home | History | Annotate | Download | only in freetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  fttrigon.h                                                             */
      4 /*                                                                         */
      5 /*    FreeType trigonometric functions (specification).                    */
      6 /*                                                                         */
      7 /*  Copyright 2001-2018 by                                                 */
      8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19 #ifndef FTTRIGON_H_
     20 #define FTTRIGON_H_
     21 
     22 #include FT_FREETYPE_H
     23 
     24 #ifdef FREETYPE_H
     25 #error "freetype.h of FreeType 1 has been loaded!"
     26 #error "Please fix the directory search order for header files"
     27 #error "so that freetype.h of FreeType 2 is found first."
     28 #endif
     29 
     30 
     31 FT_BEGIN_HEADER
     32 
     33 
     34   /*************************************************************************/
     35   /*                                                                       */
     36   /* <Section>                                                             */
     37   /*   computations                                                        */
     38   /*                                                                       */
     39   /*************************************************************************/
     40 
     41 
     42   /*************************************************************************
     43    *
     44    * @type:
     45    *   FT_Angle
     46    *
     47    * @description:
     48    *   This type is used to model angle values in FreeType.  Note that the
     49    *   angle is a 16.16 fixed-point value expressed in degrees.
     50    *
     51    */
     52   typedef FT_Fixed  FT_Angle;
     53 
     54 
     55   /*************************************************************************
     56    *
     57    * @macro:
     58    *   FT_ANGLE_PI
     59    *
     60    * @description:
     61    *   The angle pi expressed in @FT_Angle units.
     62    *
     63    */
     64 #define FT_ANGLE_PI  ( 180L << 16 )
     65 
     66 
     67   /*************************************************************************
     68    *
     69    * @macro:
     70    *   FT_ANGLE_2PI
     71    *
     72    * @description:
     73    *   The angle 2*pi expressed in @FT_Angle units.
     74    *
     75    */
     76 #define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
     77 
     78 
     79   /*************************************************************************
     80    *
     81    * @macro:
     82    *   FT_ANGLE_PI2
     83    *
     84    * @description:
     85    *   The angle pi/2 expressed in @FT_Angle units.
     86    *
     87    */
     88 #define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
     89 
     90 
     91   /*************************************************************************
     92    *
     93    * @macro:
     94    *   FT_ANGLE_PI4
     95    *
     96    * @description:
     97    *   The angle pi/4 expressed in @FT_Angle units.
     98    *
     99    */
    100 #define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
    101 
    102 
    103   /*************************************************************************
    104    *
    105    * @function:
    106    *   FT_Sin
    107    *
    108    * @description:
    109    *   Return the sinus of a given angle in fixed-point format.
    110    *
    111    * @input:
    112    *   angle ::
    113    *     The input angle.
    114    *
    115    * @return:
    116    *   The sinus value.
    117    *
    118    * @note:
    119    *   If you need both the sinus and cosinus for a given angle, use the
    120    *   function @FT_Vector_Unit.
    121    *
    122    */
    123   FT_EXPORT( FT_Fixed )
    124   FT_Sin( FT_Angle  angle );
    125 
    126 
    127   /*************************************************************************
    128    *
    129    * @function:
    130    *   FT_Cos
    131    *
    132    * @description:
    133    *   Return the cosinus of a given angle in fixed-point format.
    134    *
    135    * @input:
    136    *   angle ::
    137    *     The input angle.
    138    *
    139    * @return:
    140    *   The cosinus value.
    141    *
    142    * @note:
    143    *   If you need both the sinus and cosinus for a given angle, use the
    144    *   function @FT_Vector_Unit.
    145    *
    146    */
    147   FT_EXPORT( FT_Fixed )
    148   FT_Cos( FT_Angle  angle );
    149 
    150 
    151   /*************************************************************************
    152    *
    153    * @function:
    154    *   FT_Tan
    155    *
    156    * @description:
    157    *   Return the tangent of a given angle in fixed-point format.
    158    *
    159    * @input:
    160    *   angle ::
    161    *     The input angle.
    162    *
    163    * @return:
    164    *   The tangent value.
    165    *
    166    */
    167   FT_EXPORT( FT_Fixed )
    168   FT_Tan( FT_Angle  angle );
    169 
    170 
    171   /*************************************************************************
    172    *
    173    * @function:
    174    *   FT_Atan2
    175    *
    176    * @description:
    177    *   Return the arc-tangent corresponding to a given vector (x,y) in
    178    *   the 2d plane.
    179    *
    180    * @input:
    181    *   x ::
    182    *     The horizontal vector coordinate.
    183    *
    184    *   y ::
    185    *     The vertical vector coordinate.
    186    *
    187    * @return:
    188    *   The arc-tangent value (i.e. angle).
    189    *
    190    */
    191   FT_EXPORT( FT_Angle )
    192   FT_Atan2( FT_Fixed  x,
    193             FT_Fixed  y );
    194 
    195 
    196   /*************************************************************************
    197    *
    198    * @function:
    199    *   FT_Angle_Diff
    200    *
    201    * @description:
    202    *   Return the difference between two angles.  The result is always
    203    *   constrained to the ]-PI..PI] interval.
    204    *
    205    * @input:
    206    *   angle1 ::
    207    *     First angle.
    208    *
    209    *   angle2 ::
    210    *     Second angle.
    211    *
    212    * @return:
    213    *   Constrained value of `value2-value1'.
    214    *
    215    */
    216   FT_EXPORT( FT_Angle )
    217   FT_Angle_Diff( FT_Angle  angle1,
    218                  FT_Angle  angle2 );
    219 
    220 
    221   /*************************************************************************
    222    *
    223    * @function:
    224    *   FT_Vector_Unit
    225    *
    226    * @description:
    227    *   Return the unit vector corresponding to a given angle.  After the
    228    *   call, the value of `vec.x' will be `cos(angle)', and the value of
    229    *   `vec.y' will be `sin(angle)'.
    230    *
    231    *   This function is useful to retrieve both the sinus and cosinus of a
    232    *   given angle quickly.
    233    *
    234    * @output:
    235    *   vec ::
    236    *     The address of target vector.
    237    *
    238    * @input:
    239    *   angle ::
    240    *     The input angle.
    241    *
    242    */
    243   FT_EXPORT( void )
    244   FT_Vector_Unit( FT_Vector*  vec,
    245                   FT_Angle    angle );
    246 
    247 
    248   /*************************************************************************
    249    *
    250    * @function:
    251    *   FT_Vector_Rotate
    252    *
    253    * @description:
    254    *   Rotate a vector by a given angle.
    255    *
    256    * @inout:
    257    *   vec ::
    258    *     The address of target vector.
    259    *
    260    * @input:
    261    *   angle ::
    262    *     The input angle.
    263    *
    264    */
    265   FT_EXPORT( void )
    266   FT_Vector_Rotate( FT_Vector*  vec,
    267                     FT_Angle    angle );
    268 
    269 
    270   /*************************************************************************
    271    *
    272    * @function:
    273    *   FT_Vector_Length
    274    *
    275    * @description:
    276    *   Return the length of a given vector.
    277    *
    278    * @input:
    279    *   vec ::
    280    *     The address of target vector.
    281    *
    282    * @return:
    283    *   The vector length, expressed in the same units that the original
    284    *   vector coordinates.
    285    *
    286    */
    287   FT_EXPORT( FT_Fixed )
    288   FT_Vector_Length( FT_Vector*  vec );
    289 
    290 
    291   /*************************************************************************
    292    *
    293    * @function:
    294    *   FT_Vector_Polarize
    295    *
    296    * @description:
    297    *   Compute both the length and angle of a given vector.
    298    *
    299    * @input:
    300    *   vec ::
    301    *     The address of source vector.
    302    *
    303    * @output:
    304    *   length ::
    305    *     The vector length.
    306    *
    307    *   angle ::
    308    *     The vector angle.
    309    *
    310    */
    311   FT_EXPORT( void )
    312   FT_Vector_Polarize( FT_Vector*  vec,
    313                       FT_Fixed   *length,
    314                       FT_Angle   *angle );
    315 
    316 
    317   /*************************************************************************
    318    *
    319    * @function:
    320    *   FT_Vector_From_Polar
    321    *
    322    * @description:
    323    *   Compute vector coordinates from a length and angle.
    324    *
    325    * @output:
    326    *   vec ::
    327    *     The address of source vector.
    328    *
    329    * @input:
    330    *   length ::
    331    *     The vector length.
    332    *
    333    *   angle ::
    334    *     The vector angle.
    335    *
    336    */
    337   FT_EXPORT( void )
    338   FT_Vector_From_Polar( FT_Vector*  vec,
    339                         FT_Fixed    length,
    340                         FT_Angle    angle );
    341 
    342   /* */
    343 
    344 
    345 FT_END_HEADER
    346 
    347 #endif /* FTTRIGON_H_ */
    348 
    349 
    350 /* END */
    351