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