1/***************************************************************************/
2/*                                                                         */
3/*  fttrigon.h                                                             */
4/*                                                                         */
5/*    FreeType trigonometric functions (specification).                    */
6/*                                                                         */
7/*  Copyright 2001, 2003, 2005, 2007, 2013 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
31FT_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 `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
345FT_END_HEADER
346
347#endif /* __FTTRIGON_H__ */
348
349
350/* END */
351