• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * fttrigon.h
4  *
5  *   FreeType trigonometric functions (specification).
6  *
7  * Copyright (C) 2001-2020 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 */
351