21#include "gd_ft_types.h"
28#define GD_FT_MIN(a, b) ((a) < (b) ? (a) : (b))
29#define GD_FT_MAX(a, b) ((a) > (b) ? (a) : (b))
31#define GD_FT_ABS(a) ((a) < 0 ? -(a) : (a))
38#define GD_FT_HYPOT(x, y) \
39 (x = GD_FT_ABS(x), y = GD_FT_ABS(y), x > y ? x + (3 * y >> 3) : y + (3 * x >> 3))
70GD_FT_Long GD_FT_MulFix(GD_FT_Long a, GD_FT_Long b);
95GD_FT_Long GD_FT_MulDiv(GD_FT_Long a, GD_FT_Long b, GD_FT_Long c);
114GD_FT_Long GD_FT_DivFix(GD_FT_Long a, GD_FT_Long b);
133typedef GD_FT_Fixed GD_FT_Angle;
144#define GD_FT_ANGLE_PI (180L << 16)
155#define GD_FT_ANGLE_2PI (GD_FT_ANGLE_PI * 2)
166#define GD_FT_ANGLE_PI2 (GD_FT_ANGLE_PI / 2)
177#define GD_FT_ANGLE_PI4 (GD_FT_ANGLE_PI / 4)
199GD_FT_Fixed GD_FT_Sin(GD_FT_Angle angle);
221GD_FT_Fixed GD_FT_Cos(GD_FT_Angle angle);
239GD_FT_Fixed GD_FT_Tan(GD_FT_Angle angle);
261GD_FT_Angle GD_FT_Atan2(GD_FT_Fixed x, GD_FT_Fixed y);
283GD_FT_Angle GD_FT_Angle_Diff(GD_FT_Angle angle1, GD_FT_Angle angle2);
307void GD_FT_Vector_Unit(GD_FT_Vector *vec, GD_FT_Angle angle);
326void GD_FT_Vector_Rotate(GD_FT_Vector *vec, GD_FT_Angle angle);
345GD_FT_Fixed GD_FT_Vector_Length(GD_FT_Vector *vec);
367void GD_FT_Vector_Polarize(GD_FT_Vector *vec, GD_FT_Fixed *length, GD_FT_Angle *angle);
389void GD_FT_Vector_From_Polar(GD_FT_Vector *vec, GD_FT_Fixed length, GD_FT_Angle angle);