2018-06-03 22:00:42 +02:00
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* fttrigon.h
|
|
|
|
*
|
|
|
|
* FreeType trigonometric functions (specification).
|
|
|
|
*
|
2019-02-23 10:07:09 +01:00
|
|
|
* Copyright (C) 2001-2019 by
|
2018-06-03 22:00:42 +02:00
|
|
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
|
|
|
*
|
|
|
|
* This file is part of the FreeType project, and may only be used,
|
|
|
|
* modified, and distributed under the terms of the FreeType project
|
|
|
|
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
|
|
|
* this file you indicate that you have read the license and
|
|
|
|
* understand and accept it fully.
|
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
|
|
|
|
|
2016-01-12 21:37:13 +01:00
|
|
|
#ifndef FTTRIGON_H_
|
|
|
|
#define FTTRIGON_H_
|
2001-05-12 20:04:08 +02:00
|
|
|
|
|
|
|
#include FT_FREETYPE_H
|
|
|
|
|
2003-11-04 08:44:19 +01:00
|
|
|
#ifdef FREETYPE_H
|
|
|
|
#error "freetype.h of FreeType 1 has been loaded!"
|
|
|
|
#error "Please fix the directory search order for header files"
|
|
|
|
#error "so that freetype.h of FreeType 2 is found first."
|
|
|
|
#endif
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
2001-05-12 20:04:08 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
2018-06-17 21:08:36 +02:00
|
|
|
* @section:
|
2018-06-03 22:00:42 +02:00
|
|
|
* computations
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @type:
|
|
|
|
* FT_Angle
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* This type is used to model angle values in FreeType. Note that the
|
2013-01-13 01:17:05 +01:00
|
|
|
* angle is a 16.16 fixed-point value expressed in degrees.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
typedef FT_Fixed FT_Angle;
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @macro:
|
|
|
|
* FT_ANGLE_PI
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* The angle pi expressed in @FT_Angle units.
|
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
#define FT_ANGLE_PI ( 180L << 16 )
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @macro:
|
|
|
|
* FT_ANGLE_2PI
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* The angle 2*pi expressed in @FT_Angle units.
|
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 )
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @macro:
|
|
|
|
* FT_ANGLE_PI2
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* The angle pi/2 expressed in @FT_Angle units.
|
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 )
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @macro:
|
|
|
|
* FT_ANGLE_PI4
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* The angle pi/4 expressed in @FT_Angle units.
|
|
|
|
*
|
|
|
|
*/
|
2001-05-12 20:04:08 +02:00
|
|
|
#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 )
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Sin
|
|
|
|
*
|
|
|
|
* @description:
|
2013-01-13 01:17:05 +01:00
|
|
|
* Return the sinus of a given angle in fixed-point format.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle ::
|
|
|
|
* The input angle.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* The sinus value.
|
|
|
|
*
|
|
|
|
* @note:
|
|
|
|
* If you need both the sinus and cosinus for a given angle, use the
|
|
|
|
* function @FT_Vector_Unit.
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Fixed )
|
|
|
|
FT_Sin( FT_Angle angle );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Cos
|
|
|
|
*
|
|
|
|
* @description:
|
2013-01-13 01:17:05 +01:00
|
|
|
* Return the cosinus of a given angle in fixed-point format.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle ::
|
|
|
|
* The input angle.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* The cosinus value.
|
|
|
|
*
|
|
|
|
* @note:
|
|
|
|
* If you need both the sinus and cosinus for a given angle, use the
|
|
|
|
* function @FT_Vector_Unit.
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Fixed )
|
2001-06-28 19:49:10 +02:00
|
|
|
FT_Cos( FT_Angle angle );
|
2001-06-28 09:17:51 +02:00
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Tan
|
|
|
|
*
|
|
|
|
* @description:
|
2013-01-13 01:17:05 +01:00
|
|
|
* Return the tangent of a given angle in fixed-point format.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle ::
|
|
|
|
* The input angle.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* The tangent value.
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Fixed )
|
|
|
|
FT_Tan( FT_Angle angle );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Atan2
|
|
|
|
*
|
|
|
|
* @description:
|
2018-08-24 18:52:30 +02:00
|
|
|
* Return the arc-tangent corresponding to a given vector (x,y) in the 2d
|
|
|
|
* plane.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* x ::
|
|
|
|
* The horizontal vector coordinate.
|
|
|
|
*
|
|
|
|
* y ::
|
|
|
|
* The vertical vector coordinate.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* The arc-tangent value (i.e. angle).
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Angle )
|
|
|
|
FT_Atan2( FT_Fixed x,
|
|
|
|
FT_Fixed y );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Angle_Diff
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Return the difference between two angles. The result is always
|
|
|
|
* constrained to the ]-PI..PI] interval.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle1 ::
|
|
|
|
* First angle.
|
|
|
|
*
|
|
|
|
* angle2 ::
|
|
|
|
* Second angle.
|
|
|
|
*
|
|
|
|
* @return:
|
2018-09-04 10:37:44 +02:00
|
|
|
* Constrained value of `angle2-angle1`.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
*/
|
2002-07-01 23:35:17 +02:00
|
|
|
FT_EXPORT( FT_Angle )
|
|
|
|
FT_Angle_Diff( FT_Angle angle1,
|
|
|
|
FT_Angle angle2 );
|
2002-06-27 00:05:05 +02:00
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Vector_Unit
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Return the unit vector corresponding to a given angle. After the
|
2018-09-04 10:37:44 +02:00
|
|
|
* call, the value of `vec.x` will be `cos(angle)`, and the value of
|
|
|
|
* `vec.y` will be `sin(angle)`.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* This function is useful to retrieve both the sinus and cosinus of a
|
|
|
|
* given angle quickly.
|
|
|
|
*
|
|
|
|
* @output:
|
|
|
|
* vec ::
|
|
|
|
* The address of target vector.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle ::
|
2014-09-23 04:06:38 +02:00
|
|
|
* The input angle.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Vector_Unit( FT_Vector* vec,
|
|
|
|
FT_Angle angle );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Vector_Rotate
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Rotate a vector by a given angle.
|
|
|
|
*
|
|
|
|
* @inout:
|
|
|
|
* vec ::
|
|
|
|
* The address of target vector.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* angle ::
|
2014-09-23 04:06:38 +02:00
|
|
|
* The input angle.
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Vector_Rotate( FT_Vector* vec,
|
|
|
|
FT_Angle angle );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Vector_Length
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Return the length of a given vector.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* vec ::
|
|
|
|
* The address of target vector.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* The vector length, expressed in the same units that the original
|
|
|
|
* vector coordinates.
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Fixed )
|
|
|
|
FT_Vector_Length( FT_Vector* vec );
|
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Vector_Polarize
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Compute both the length and angle of a given vector.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* vec ::
|
|
|
|
* The address of source vector.
|
|
|
|
*
|
|
|
|
* @output:
|
|
|
|
* length ::
|
|
|
|
* The vector length.
|
|
|
|
*
|
|
|
|
* angle ::
|
|
|
|
* The vector angle.
|
|
|
|
*
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Vector_Polarize( FT_Vector* vec,
|
|
|
|
FT_Fixed *length,
|
|
|
|
FT_Angle *angle );
|
2002-06-27 01:45:21 +02:00
|
|
|
|
|
|
|
|
2018-09-04 08:00:58 +02:00
|
|
|
/**************************************************************************
|
2005-10-27 23:28:35 +02:00
|
|
|
*
|
|
|
|
* @function:
|
|
|
|
* FT_Vector_From_Polar
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* Compute vector coordinates from a length and angle.
|
|
|
|
*
|
|
|
|
* @output:
|
|
|
|
* vec ::
|
|
|
|
* The address of source vector.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* length ::
|
|
|
|
* The vector length.
|
|
|
|
*
|
|
|
|
* angle ::
|
|
|
|
* The vector angle.
|
|
|
|
*
|
|
|
|
*/
|
2002-06-27 01:45:21 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Vector_From_Polar( FT_Vector* vec,
|
|
|
|
FT_Fixed length,
|
|
|
|
FT_Angle angle );
|
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
/* */
|
2001-05-12 20:04:08 +02:00
|
|
|
|
2001-06-28 19:49:10 +02:00
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
FT_END_HEADER
|
|
|
|
|
2016-01-12 21:37:13 +01:00
|
|
|
#endif /* FTTRIGON_H_ */
|
2001-05-12 20:04:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|