misc/libfreetype/include/freetype/fttrigon.h
changeset 5172 88f2e05288ba
equal deleted inserted replaced
5171:f9283dc4860d 5172:88f2e05288ba
       
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  fttrigon.h                                                             */
       
     4 /*                                                                         */
       
     5 /*    FreeType trigonometric functions (specification).                    */
       
     6 /*                                                                         */
       
     7 /*  Copyright 2001, 2003, 2005, 2007 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 float 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 `sin(angle)', and the value of
       
   229    *   `vec.y' will be `cos(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 address of 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 address of 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 */