10 T ctrl_y1, T ctrl_y2, T ctrl_y3,
double t, T* pX, T* pY)
14 double b = 2.0 * it *
t;
16 *pX = (T) (
a * (
double) ctrl_x1 +
b * (
double) ctrl_x2 +
c * (
double) ctrl_x3);
17 *pY = (T) (
a * (
double) ctrl_y1 +
b * (
double) ctrl_y2 +
c * (
double) ctrl_y3);
22 T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4,
23 double* pAX,
double* pBX,
double* pCX,
24 double* pAY,
double* pBY,
double* pCY)
26 double cx = *pCX = 3.0 * (double) (ctrl_x2 - ctrl_x1);
27 double bx = *pBX = 3.0 * (double) (ctrl_x3 - ctrl_x2) - cx;
28 *pAX = (double) (ctrl_x4 - ctrl_x1) - cx - bx;
29 double cy = *pCY = 3.0 * (double) (ctrl_y2 - ctrl_y1);
30 double by = *pBY = 3.0 * (double) (ctrl_y3 - ctrl_y2) - cy;
31 *pAY = (double) (ctrl_y4 - ctrl_y1) - cy - by;
37 T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4,
double t, T* pX, T* pY)
39 double ax, bx, cx, ay, by, cy;
41 ctrl_y1, ctrl_y2, ctrl_y3, ctrl_y4,
42 &ax, &bx, &cx, &ay, &by, &cy);
46 *pX = (T) (ax * t3 + bx * t2 + cx *
t) + ctrl_x1;
47 *pY = (T) (ay * t3 + by * t2 + cy *
t) + ctrl_y1;
53T
LICE_Bezier_GetY(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_y1, T ctrl_y2, T ctrl_y3, T
x,
double* pt=0)
66 double t,
a = (double) ctrl_x1 - (
double) (2 * ctrl_x2) + (
double) ctrl_x3;
69 t=(ctrl_x1 == ctrl_x3) ? 0.0 : (
x-ctrl_x1)/(ctrl_x3-ctrl_x1);
73 t = (double) (ctrl_x2 - ctrl_x1);
74 t = (-
t + sqrt(
t *
t -
a * (ctrl_x1 -
x))) /
a;
76 const double it = 1.0 -
t;
79 return (T) (it * it * (double) ctrl_y1 +
t * (2.0*it*(double)ctrl_y2 +
t * (double) ctrl_y3));
86 double b = 2.0 * (1.0 -
t) *
t;
88 *pX = (T) (
b * (
double) ctrl_x2 +
c);
89 *pY = (T) (
b * (
double) ctrl_y2 +
c);
102 if (ctrl_x2 == (T) 0.5) {
122 const double t = (-ctrl_x2 + sqrt(ctrl_x2 * (ctrl_x2 - 2.0*
x) +
x)) / (1.0-2.0*ctrl_x2);
124 return (T) (((2.0 * (1.0-
t)) * ctrl_y2 +
t)*
t);
134 T* ctrl_x2a, T* ctrl_x2b, T* ctrl_y2a, T* ctrl_y2b)
136 double dxa = alpha * (double) (x2 - x1);
137 double dxb = alpha * (double) (x3 - x2);
138 if (ctrl_x2a) *ctrl_x2a = x2 - (T) dxa;
139 if (ctrl_x2b) *ctrl_x2b = x2 + (T) dxb;
143 if (ctrl_y2a) *ctrl_y2a = y2;
144 if (ctrl_y2b) *ctrl_y2b = y2;
148 double m = (double) (y3 - y1) / (double) (x3 - x1);
149 if (ctrl_y2a) *ctrl_y2a = y2 - (T) (
m * dxa);
150 if (ctrl_y2b) *ctrl_y2b = y2 + (T) (
m * dxb);
161 int x1 = *pX++, x2 = *pX++;
162 T y1 = *pY++, y2 = *pY++;
163 double xm1, xm2 = 0.5 * (x1 + x2);
164 double ym1, ym2 = 0.5 * (y1 + y2);
166 double yi = y1,
m = (y2 - y1) / (
double) (x2 - x1);
167 int xi = x1, iend = (
int)floor(xm2+0.5);
168 for (; xi < iend; xi++, yi +=
m)
170 if (--pDest_sz<0)
return;
174 for (
int i = 2;
i <
n; ++
i)
182 xm2 = 0.5 * (x1 + x2);
184 ym2 = 0.5 * (y1 + y2);
186 iend = (
int)floor(xm2+0.5);
187 if (ym1 == ym2 && y1 == ym1)
189 for (; xi < iend; xi++)
191 if (--pDest_sz<0)
return;
197 for (; xi < iend; xi++)
199 if (--pDest_sz<0)
return;
200 *pDest++ = (T)
LICE_Bezier_GetY(xm1, (
double)x1, xm2, ym1, (
double)y1, ym2, (
double)xi);
205 m = (y2 - y1) / (
double) (x2 - x1);
207 for (; xi < x2; xi++, yi +=
m)
209 if (--pDest_sz<0)
return;
216#define EVAL_CBEZ(tx,a,b,c,d,t) \
219 tx=(a*t*_t2+b*_t2+c*t+d); \
222#define EVAL_CBEZXY(tx, ty, ax, bx, cx, dx, ay, by, cy, dy, t) \
226 tx=ax*_t3+bx*_t2+cx*t+dx; \
227 ty=ay*_t3+by*_t2+cy*t+dy; \
232 T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4, T
x,
233 T* pNextX = 0, T* pdYdX = 0,
double* ptLo = 0,
double* ptHi = 0)
237 if (pNextX) *pNextX = ctrl_x1;
238 if (pdYdX) *pdYdX = (T) 0.0;
243 if (pNextX) *pNextX = ctrl_x4;
244 if (pdYdX) *pdYdX = (T) 0.0;
248 double ax, bx, cx, ay, by, cy;
250 ctrl_y1, ctrl_y2, ctrl_y3, ctrl_y4,
251 &ax, &bx, &cx, &ay, &by, &cy);
253 double tx,
t, tLo = 0.0, tHi = 1.0;
254 double xLo=0.0, xHi=0.0, yLo, yHi;
258 t = 0.5 * (tLo + tHi);
259 EVAL_CBEZ(tx, ax, bx, cx, (
double) ctrl_x1,
t);
265 else if (tx > (
double)
x)
275 if (tHi > 1.0) tHi = 1.0;
276 EVAL_CBEZ(xHi, ax, bx, cx, (
double) ctrl_x1, tHi);
281 if (tLo == 0.0)
EVAL_CBEZ(xLo, ax, bx, cx, (
double) ctrl_x1, 0.0);
282 if (tHi == 1.0)
EVAL_CBEZ(xHi, ax, bx, cx, (
double) ctrl_x1, 1.0);
284 EVAL_CBEZ(yLo, ay, by, cy, (
double) ctrl_y1, tLo);
285 EVAL_CBEZ(yHi, ay, by, cy, (
double) ctrl_y1, tHi);
287 double dYdX = (xLo == xHi ? 0.0 : (yHi - yLo) / (xHi - xLo));
288 double y = yLo + ((double)
x - xLo) * dYdX;
290 if (pNextX) *pNextX = (T) xHi;
291 if (pdYdX) *pdYdX = (T) dYdX;
293 if (ptLo) *ptLo = tLo;
294 if (ptHi) *ptHi = tHi;
uint8_t a
Definition Spc_Cpu.h:141
unsigned * m
Definition inflate.c:1559
struct huft * t
Definition inflate.c:943
int y
Definition inflate.c:1588
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
void LICE_Bezier(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_y1, T ctrl_y2, T ctrl_y3, double t, T *pX, T *pY)
Definition lice_bezier.h:9
#define CBEZ_ITERS
Definition lice_bezier.h:214
void LICE_CBezier_GetCoeffs(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_x4, T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4, double *pAX, double *pBX, double *pCX, double *pAY, double *pBY, double *pCY)
Definition lice_bezier.h:21
void LICE_CBezier(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_x4, T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4, double t, T *pX, T *pY)
Definition lice_bezier.h:36
void LICE_Bezier_Norm(T ctrl_x2, T ctrl_y2, double t, T *pX, T *pY)
Definition lice_bezier.h:84
T LICE_Bezier_GetY(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_y1, T ctrl_y2, T ctrl_y3, T x, double *pt=0)
Definition lice_bezier.h:53
T LICE_Bezier_GetY_Norm(T ctrl_x2, T ctrl_y2, T x)
Definition lice_bezier.h:94
#define EVAL_CBEZ(tx, a, b, c, d, t)
Definition lice_bezier.h:216
void LICE_Bezier_FindCardinalCtlPts(double alpha, T x1, T x2, T x3, T y1, T y2, T y3, T *ctrl_x2a, T *ctrl_x2b, T *ctrl_y2a, T *ctrl_y2b)
Definition lice_bezier.h:133
void LICE_QNurbs(T *pDest, int pDest_sz, int *pX, T *pY, int n)
Definition lice_bezier.h:159
T LICE_CBezier_GetY(T ctrl_x1, T ctrl_x2, T ctrl_x3, T ctrl_x4, T ctrl_y1, T ctrl_y2, T ctrl_y3, T ctrl_y4, T x, T *pNextX=0, T *pdYdX=0, double *ptLo=0, double *ptHi=0)
Definition lice_bezier.h:231
int n
Definition crypt.c:458
return c
Definition crypt.c:175
typedef int(UZ_EXP MsgFn)()