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