1 | /***************************************************************************/ |
2 | /* */ |
3 | /* fttrigon.h */ |
4 | /* */ |
5 | /* FreeType trigonometric functions (specification). */ |
6 | /* */ |
7 | /* Copyright 2001-2018 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-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 `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 | |