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