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