]>
Commit | Line | Data |
---|---|---|
7407ac7f BB |
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 | ||
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 `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 */ |