php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
gd_matrix.c
Go to the documentation of this file.
1#include "gd.h"
2#include <math.h>
3
4#ifndef M_PI
5# define M_PI 3.14159265358979323846
6#endif
7
12
28 const double affine[6])
29{
30 double x = src->x;
31 double y = src->y;
32 dst->x = x * affine[0] + y * affine[2] + affine[4];
33 dst->y = x * affine[1] + y * affine[3] + affine[5];
34 return GD_TRUE;
35}
36
58int gdAffineInvert (double dst[6], const double src[6])
59{
60 double r_det = (src[0] * src[3] - src[1] * src[2]);
61
62 if (r_det <= 0.0) {
63 return GD_FALSE;
64 }
65
66 r_det = 1.0 / r_det;
67 dst[0] = src[3] * r_det;
68 dst[1] = -src[1] * r_det;
69 dst[2] = -src[2] * r_det;
70 dst[3] = src[0] * r_det;
71 dst[4] = -src[4] * dst[0] - src[5] * dst[2];
72 dst[5] = -src[4] * dst[1] - src[5] * dst[3];
73 return GD_TRUE;
74}
75
93int gdAffineFlip (double dst[6], const double src[6], const int flip_h, const int flip_v)
94{
95 dst[0] = flip_h ? - src[0] : src[0];
96 dst[1] = flip_h ? - src[1] : src[1];
97 dst[2] = flip_v ? - src[2] : src[2];
98 dst[3] = flip_v ? - src[3] : src[3];
99 dst[4] = flip_h ? - src[4] : src[4];
100 dst[5] = flip_v ? - src[5] : src[5];
101 return GD_TRUE;
102}
103
121int gdAffineConcat (double dst[6], const double m1[6], const double m2[6])
122{
123 double dst0, dst1, dst2, dst3, dst4, dst5;
124
125 dst0 = m1[0] * m2[0] + m1[1] * m2[2];
126 dst1 = m1[0] * m2[1] + m1[1] * m2[3];
127 dst2 = m1[2] * m2[0] + m1[3] * m2[2];
128 dst3 = m1[2] * m2[1] + m1[3] * m2[3];
129 dst4 = m1[4] * m2[0] + m1[5] * m2[2] + m2[4];
130 dst5 = m1[4] * m2[1] + m1[5] * m2[3] + m2[5];
131 dst[0] = dst0;
132 dst[1] = dst1;
133 dst[2] = dst2;
134 dst[3] = dst3;
135 dst[4] = dst4;
136 dst[5] = dst5;
137 return GD_TRUE;
138}
139
150int gdAffineIdentity (double dst[6])
151{
152 dst[0] = 1;
153 dst[1] = 0;
154 dst[2] = 0;
155 dst[3] = 1;
156 dst[4] = 0;
157 dst[5] = 0;
158 return GD_TRUE;
159}
160
172int gdAffineScale (double dst[6], const double scale_x, const double scale_y)
173{
174 dst[0] = scale_x;
175 dst[1] = 0;
176 dst[2] = 0;
177 dst[3] = scale_y;
178 dst[4] = 0;
179 dst[5] = 0;
180 return GD_TRUE;
181}
182
197int gdAffineRotate (double dst[6], const double angle)
198{
199 const double sin_t = sin (angle * M_PI / 180.0);
200 const double cos_t = cos (angle * M_PI / 180.0);
201
202 dst[0] = cos_t;
203 dst[1] = sin_t;
204 dst[2] = -sin_t;
205 dst[3] = cos_t;
206 dst[4] = 0;
207 dst[5] = 0;
208 return GD_TRUE;
209}
210
222int gdAffineShearHorizontal(double dst[6], const double angle)
223{
224 dst[0] = 1;
225 dst[1] = 0;
226 dst[2] = tan(angle * M_PI / 180.0);
227 dst[3] = 1;
228 dst[4] = 0;
229 dst[5] = 0;
230 return GD_TRUE;
231}
232
244int gdAffineShearVertical(double dst[6], const double angle)
245{
246 dst[0] = 1;
247 dst[1] = tan(angle * M_PI / 180.0);
248 dst[2] = 0;
249 dst[3] = 1;
250 dst[4] = 0;
251 dst[5] = 0;
252 return GD_TRUE;
253}
254
267int gdAffineTranslate (double dst[6], const double offset_x, const double offset_y)
268{
269 dst[0] = 1;
270 dst[1] = 0;
271 dst[2] = 0;
272 dst[3] = 1;
273 dst[4] = offset_x;
274 dst[5] = offset_y;
275 return GD_TRUE;
276}
277
289double gdAffineExpansion (const double src[6])
290{
291 return sqrt (fabs (src[0] * src[3] - src[1] * src[2]));
292}
293
305int gdAffineRectilinear (const double m[6])
306{
307 return ((fabs (m[1]) < GD_EPSILON && fabs (m[2]) < GD_EPSILON) ||
308 (fabs (m[0]) < GD_EPSILON && fabs (m[3]) < GD_EPSILON));
309}
310
323int gdAffineEqual (const double m1[6], const double m2[6])
324{
325 return (fabs (m1[0] - m2[0]) < GD_EPSILON &&
326 fabs (m1[1] - m2[1]) < GD_EPSILON &&
327 fabs (m1[2] - m2[2]) < GD_EPSILON &&
328 fabs (m1[3] - m2[3]) < GD_EPSILON &&
329 fabs (m1[4] - m2[4]) < GD_EPSILON &&
330 fabs (m1[5] - m2[5]) < GD_EPSILON);
331}
tan(float $num)
sin(float $num)
sqrt(float $num)
cos(float $num)
#define M_PI
Definition gd.c:88
#define GD_FALSE
Definition gd.h:96
#define GD_TRUE
Definition gd.h:95
#define GD_EPSILON
Definition gd.h:98
struct gdPointF * gdPointFPtr
int gdAffineInvert(double dst[6], const double src[6])
Definition gd_matrix.c:58
int gdAffineApplyToPointF(gdPointFPtr dst, const gdPointFPtr src, const double affine[6])
Definition gd_matrix.c:27
int gdAffineShearVertical(double dst[6], const double angle)
Definition gd_matrix.c:244
int gdAffineRectilinear(const double m[6])
Definition gd_matrix.c:305
int gdAffineIdentity(double dst[6])
Definition gd_matrix.c:150
int gdAffineEqual(const double m1[6], const double m2[6])
Definition gd_matrix.c:323
int gdAffineConcat(double dst[6], const double m1[6], const double m2[6])
Definition gd_matrix.c:121
int gdAffineRotate(double dst[6], const double angle)
Definition gd_matrix.c:197
int gdAffineTranslate(double dst[6], const double offset_x, const double offset_y)
Definition gd_matrix.c:267
int gdAffineShearHorizontal(double dst[6], const double angle)
Definition gd_matrix.c:222
double gdAffineExpansion(const double src[6])
Definition gd_matrix.c:289
int gdAffineFlip(double dst[6], const double src[6], const int flip_h, const int flip_v)
Definition gd_matrix.c:93
int gdAffineScale(double dst[6], const double scale_x, const double scale_y)
Definition gd_matrix.c:172
double y
Definition gd.h:269
double x
Definition gd.h:269