(root)/
freetype-2.13.2/
include/
freetype/
fttrigon.h
       1  /****************************************************************************
       2   *
       3   * fttrigon.h
       4   *
       5   *   FreeType trigonometric functions (specification).
       6   *
       7   * Copyright (C) 2001-2023 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 <freetype/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 the 2d
     178     *   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 `angle2-angle1`.
     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 */