Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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 */
  351.