179 x -= spline->x_grid.start;
180 y -= spline->y_grid.start;
181 float ux = x*spline->x_grid.delta_inv;
182 float uy = y*spline->y_grid.delta_inv;
183 float ipartx, iparty, tx, ty;
184 tx = modff (ux, &ipartx);
185 ty = modff (uy, &iparty);
186 int ix = (int) ipartx;
187 int iy = (int) iparty;
189 float tpx[4], tpy[4], a[4], b[4], da[4], db[4];
190 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
191 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
194 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
195 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
196 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
197 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
198 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
199 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
200 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
201 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
203 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
204 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
205 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
206 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
207 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
208 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
209 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
210 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
212 int xs = spline->x_stride;
213 float dxInv = spline->x_grid.delta_inv;
214 float dyInv = spline->y_grid.delta_inv;
215#define C(i,j) coefs[(ix+(i))*xs+iy+(j)]
217 (a[0]*(
C(0,0)*b[0]+
C(0,1)*b[1]+
C(0,2)*b[2]+
C(0,3)*b[3])+
218 a[1]*(
C(1,0)*b[0]+
C(1,1)*b[1]+
C(1,2)*b[2]+
C(1,3)*b[3])+
219 a[2]*(
C(2,0)*b[0]+
C(2,1)*b[1]+
C(2,2)*b[2]+
C(2,3)*b[3])+
220 a[3]*(
C(3,0)*b[0]+
C(3,1)*b[1]+
C(3,2)*b[2]+
C(3,3)*b[3]));
222 (da[0]*(
C(0,0)*b[0]+
C(0,1)*b[1]+
C(0,2)*b[2]+
C(0,3)*b[3])+
223 da[1]*(
C(1,0)*b[0]+
C(1,1)*b[1]+
C(1,2)*b[2]+
C(1,3)*b[3])+
224 da[2]*(
C(2,0)*b[0]+
C(2,1)*b[1]+
C(2,2)*b[2]+
C(2,3)*b[3])+
225 da[3]*(
C(3,0)*b[0]+
C(3,1)*b[1]+
C(3,2)*b[2]+
C(3,3)*b[3]));
227 (a[0]*(
C(0,0)*db[0]+
C(0,1)*db[1]+
C(0,2)*db[2]+
C(0,3)*db[3])+
228 a[1]*(
C(1,0)*db[0]+
C(1,1)*db[1]+
C(1,2)*db[2]+
C(1,3)*db[3])+
229 a[2]*(
C(2,0)*db[0]+
C(2,1)*db[1]+
C(2,2)*db[2]+
C(2,3)*db[3])+
230 a[3]*(
C(3,0)*db[0]+
C(3,1)*db[1]+
C(3,2)*db[2]+
C(3,3)*db[3]));
241 x -= spline->x_grid.start;
242 y -= spline->y_grid.start;
243 float ux = x*spline->x_grid.delta_inv;
244 float uy = y*spline->y_grid.delta_inv;
245 float ipartx, iparty, tx, ty;
246 tx = modff (ux, &ipartx);
247 ty = modff (uy, &iparty);
248 int ix = (int) ipartx;
249 int iy = (int) iparty;
251 float tpx[4], tpy[4], a[4], b[4], da[4], db[4], d2a[4], d2b[4];
252 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
253 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
256 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
257 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
258 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
259 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
260 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
261 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
262 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
263 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
264 d2a[0] = (
d2Af[ 2]*tpx[2] +
d2Af[ 3]*tpx[3]);
265 d2a[1] = (
d2Af[ 6]*tpx[2] +
d2Af[ 7]*tpx[3]);
266 d2a[2] = (
d2Af[10]*tpx[2] +
d2Af[11]*tpx[3]);
267 d2a[3] = (
d2Af[14]*tpx[2] +
d2Af[15]*tpx[3]);
269 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
270 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
271 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
272 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
273 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
274 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
275 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
276 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
277 d2b[0] = (
d2Af[ 2]*tpy[2] +
d2Af[ 3]*tpy[3]);
278 d2b[1] = (
d2Af[ 6]*tpy[2] +
d2Af[ 7]*tpy[3]);
279 d2b[2] = (
d2Af[10]*tpy[2] +
d2Af[11]*tpy[3]);
280 d2b[3] = (
d2Af[14]*tpy[2] +
d2Af[15]*tpy[3]);
282 int xs = spline->x_stride;
284 float dxInv = spline->x_grid.delta_inv;
285 float dyInv = spline->y_grid.delta_inv;
287#define C(i,j) coefs[(ix+(i))*xs+iy+(j)]
289 (a[0]*(
C(0,0)*b[0]+
C(0,1)*b[1]+
C(0,2)*b[2]+
C(0,3)*b[3])+
290 a[1]*(
C(1,0)*b[0]+
C(1,1)*b[1]+
C(1,2)*b[2]+
C(1,3)*b[3])+
291 a[2]*(
C(2,0)*b[0]+
C(2,1)*b[1]+
C(2,2)*b[2]+
C(2,3)*b[3])+
292 a[3]*(
C(3,0)*b[0]+
C(3,1)*b[1]+
C(3,2)*b[2]+
C(3,3)*b[3]));
294 (da[0]*(
C(0,0)*b[0]+
C(0,1)*b[1]+
C(0,2)*b[2]+
C(0,3)*b[3])+
295 da[1]*(
C(1,0)*b[0]+
C(1,1)*b[1]+
C(1,2)*b[2]+
C(1,3)*b[3])+
296 da[2]*(
C(2,0)*b[0]+
C(2,1)*b[1]+
C(2,2)*b[2]+
C(2,3)*b[3])+
297 da[3]*(
C(3,0)*b[0]+
C(3,1)*b[1]+
C(3,2)*b[2]+
C(3,3)*b[3]));
299 (a[0]*(
C(0,0)*db[0]+
C(0,1)*db[1]+
C(0,2)*db[2]+
C(0,3)*db[3])+
300 a[1]*(
C(1,0)*db[0]+
C(1,1)*db[1]+
C(1,2)*db[2]+
C(1,3)*db[3])+
301 a[2]*(
C(2,0)*db[0]+
C(2,1)*db[1]+
C(2,2)*db[2]+
C(2,3)*db[3])+
302 a[3]*(
C(3,0)*db[0]+
C(3,1)*db[1]+
C(3,2)*db[2]+
C(3,3)*db[3]));
305 (a[0]*(
C(0,0)*d2b[0]+
C(0,1)*d2b[1]+
C(0,2)*d2b[2]+
C(0,3)*d2b[3])+
306 a[1]*(
C(1,0)*d2b[0]+
C(1,1)*d2b[1]+
C(1,2)*d2b[2]+
C(1,3)*d2b[3])+
307 a[2]*(
C(2,0)*d2b[0]+
C(2,1)*d2b[1]+
C(2,2)*d2b[2]+
C(2,3)*d2b[3])+
308 a[3]*(
C(3,0)*d2b[0]+
C(3,1)*d2b[1]+
C(3,2)*d2b[2]+
C(3,3)*d2b[3])) +
310 (d2a[0]*(
C(0,0)*b[0]+
C(0,1)*b[1]+
C(0,2)*b[2]+
C(0,3)*b[3])+
311 d2a[1]*(
C(1,0)*b[0]+
C(1,1)*b[1]+
C(1,2)*b[2]+
C(1,3)*b[3])+
312 d2a[2]*(
C(2,0)*b[0]+
C(2,1)*b[1]+
C(2,2)*b[2]+
C(2,3)*b[3])+
313 d2a[3]*(
C(3,0)*b[0]+
C(3,1)*b[1]+
C(3,2)*b[2]+
C(3,3)*b[3]));
325 x -= spline->x_grid.start;
326 y -= spline->y_grid.start;
327 float ux = x*spline->x_grid.delta_inv;
328 float uy = y*spline->y_grid.delta_inv;
329 float ipartx, iparty, tx, ty;
330 tx = modff (ux, &ipartx);
331 ty = modff (uy, &iparty);
332 int ix = (int) ipartx;
333 int iy = (int) iparty;
335 float tpx[4], tpy[4], a[4], b[4], da[4], db[4], d2a[4], d2b[4];
336 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
337 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
340 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
341 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
342 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
343 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
344 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
345 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
346 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
347 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
348 d2a[0] = (
d2Af[ 2]*tpx[2] +
d2Af[ 3]*tpx[3]);
349 d2a[1] = (
d2Af[ 6]*tpx[2] +
d2Af[ 7]*tpx[3]);
350 d2a[2] = (
d2Af[10]*tpx[2] +
d2Af[11]*tpx[3]);
351 d2a[3] = (
d2Af[14]*tpx[2] +
d2Af[15]*tpx[3]);
353 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
354 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
355 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
356 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
357 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
358 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
359 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
360 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
361 d2b[0] = (
d2Af[ 2]*tpy[2] +
d2Af[ 3]*tpy[3]);
362 d2b[1] = (
d2Af[ 6]*tpy[2] +
d2Af[ 7]*tpy[3]);
363 d2b[2] = (
d2Af[10]*tpy[2] +
d2Af[11]*tpy[3]);
364 d2b[3] = (
d2Af[14]*tpy[2] +
d2Af[15]*tpy[3]);
366 int xs = spline->x_stride;
367 float dxInv = spline->x_grid.delta_inv;
368 float dyInv = spline->y_grid.delta_inv;
369#define C(i,j) coefs[(ix+(i))*xs+iy+(j)]
371 ( a[0]*(
C(0,0)* b[0]+
C(0,1)* b[1]+
C(0,2)* b[2]+
C(0,3)* b[3])+
372 a[1]*(
C(1,0)* b[0]+
C(1,1)* b[1]+
C(1,2)* b[2]+
C(1,3)* b[3])+
373 a[2]*(
C(2,0)* b[0]+
C(2,1)* b[1]+
C(2,2)* b[2]+
C(2,3)* b[3])+
374 a[3]*(
C(3,0)* b[0]+
C(3,1)* b[1]+
C(3,2)* b[2]+
C(3,3)* b[3]));
376 ( da[0]*(
C(0,0)* b[0]+
C(0,1)* b[1]+
C(0,2)* b[2]+
C(0,3)* b[3])+
377 da[1]*(
C(1,0)* b[0]+
C(1,1)* b[1]+
C(1,2)* b[2]+
C(1,3)* b[3])+
378 da[2]*(
C(2,0)* b[0]+
C(2,1)* b[1]+
C(2,2)* b[2]+
C(2,3)* b[3])+
379 da[3]*(
C(3,0)* b[0]+
C(3,1)* b[1]+
C(3,2)* b[2]+
C(3,3)* b[3]));
381 ( a[0]*(
C(0,0)* db[0]+
C(0,1)* db[1]+
C(0,2)* db[2]+
C(0,3)* db[3])+
382 a[1]*(
C(1,0)* db[0]+
C(1,1)* db[1]+
C(1,2)* db[2]+
C(1,3)* db[3])+
383 a[2]*(
C(2,0)* db[0]+
C(2,1)* db[1]+
C(2,2)* db[2]+
C(2,3)* db[3])+
384 a[3]*(
C(3,0)* db[0]+
C(3,1)* db[1]+
C(3,2)* db[2]+
C(3,3)* db[3]));
385 hess[0] = dxInv * dxInv *
386 (d2a[0]*(
C(0,0)* b[0]+
C(0,1)* b[1]+
C(0,2)* b[2]+
C(0,3)* b[3])+
387 d2a[1]*(
C(1,0)* b[0]+
C(1,1)* b[1]+
C(1,2)* b[2]+
C(1,3)* b[3])+
388 d2a[2]*(
C(2,0)* b[0]+
C(2,1)* b[1]+
C(2,2)* b[2]+
C(2,3)* b[3])+
389 d2a[3]*(
C(3,0)* b[0]+
C(3,1)* b[1]+
C(3,2)* b[2]+
C(3,3)* b[3]));
390 hess[1] = dxInv * dyInv *
391 ( da[0]*(
C(0,0)* db[0]+
C(0,1)* db[1]+
C(0,2)* db[2]+
C(0,3)* db[3])+
392 da[1]*(
C(1,0)* db[0]+
C(1,1)* db[1]+
C(1,2)* db[2]+
C(1,3)* db[3])+
393 da[2]*(
C(2,0)* db[0]+
C(2,1)* db[1]+
C(2,2)* db[2]+
C(2,3)* db[3])+
394 da[3]*(
C(3,0)* db[0]+
C(3,1)* db[1]+
C(3,2)* db[2]+
C(3,3)* db[3]));
395 hess[3] = dyInv * dyInv *
396 ( a[0]*(
C(0,0)*d2b[0]+
C(0,1)*d2b[1]+
C(0,2)*d2b[2]+
C(0,3)*d2b[3])+
397 a[1]*(
C(1,0)*d2b[0]+
C(1,1)*d2b[1]+
C(1,2)*d2b[2]+
C(1,3)*d2b[3])+
398 a[2]*(
C(2,0)*d2b[0]+
C(2,1)*d2b[1]+
C(2,2)*d2b[2]+
C(2,3)*d2b[3])+
399 a[3]*(
C(3,0)*d2b[0]+
C(3,1)*d2b[1]+
C(3,2)*d2b[2]+
C(3,3)*d2b[3]));
414 double x,
double y,
double z,
417 x -= spline->x_grid.start;
418 y -= spline->y_grid.start;
419 z -= spline->z_grid.start;
420 float ux = x*spline->x_grid.delta_inv;
421 float uy = y*spline->y_grid.delta_inv;
422 float uz = z*spline->z_grid.delta_inv;
423 float ipartx, iparty, ipartz, tx, ty, tz;
424 tx = modff (ux, &ipartx);
int ix = (int) ipartx;
425 ty = modff (uy, &iparty);
int iy = (int) iparty;
426 tz = modff (uz, &ipartz);
int iz = (int) ipartz;
431 float tpx[4], tpy[4], tpz[4], a[4], b[4], c[4];
432 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
433 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
434 tpz[0] = tz*tz*tz; tpz[1] = tz*tz; tpz[2] = tz; tpz[3] = 1.0;
437 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
438 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
439 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
440 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
442 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
443 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
444 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
445 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
447 c[0] = (
Af[ 0]*tpz[0] +
Af[ 1]*tpz[1] +
Af[ 2]*tpz[2] +
Af[ 3]*tpz[3]);
448 c[1] = (
Af[ 4]*tpz[0] +
Af[ 5]*tpz[1] +
Af[ 6]*tpz[2] +
Af[ 7]*tpz[3]);
449 c[2] = (
Af[ 8]*tpz[0] +
Af[ 9]*tpz[1] +
Af[10]*tpz[2] +
Af[11]*tpz[3]);
450 c[3] = (
Af[12]*tpz[0] +
Af[13]*tpz[1] +
Af[14]*tpz[2] +
Af[15]*tpz[3]);
452 int xs = spline->x_stride;
453 int ys = spline->y_stride;
454#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
455 *val = (a[0]*(b[0]*(
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3])+
456 b[1]*(
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3])+
457 b[2]*(
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3])+
458 b[3]*(
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]))+
459 a[1]*(b[0]*(
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3])+
460 b[1]*(
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3])+
461 b[2]*(
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3])+
462 b[3]*(
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]))+
463 a[2]*(b[0]*(
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3])+
464 b[1]*(
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3])+
465 b[2]*(
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3])+
466 b[3]*(
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]))+
467 a[3]*(b[0]*(
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3])+
468 b[1]*(
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3])+
469 b[2]*(
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3])+
470 b[3]*(
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3])));
478 double x,
double y,
double z,
481 x -= spline->x_grid.start;
482 y -= spline->y_grid.start;
483 z -= spline->z_grid.start;
484 float ux = x*spline->x_grid.delta_inv;
485 float uy = y*spline->y_grid.delta_inv;
486 float uz = z*spline->z_grid.delta_inv;
487 float ipartx, iparty, ipartz, tx, ty, tz;
488 tx = modff (ux, &ipartx);
int ix = (int) ipartx;
489 ty = modff (uy, &iparty);
int iy = (int) iparty;
490 tz = modff (uz, &ipartz);
int iz = (int) ipartz;
492 float tpx[4], tpy[4], tpz[4], a[4], b[4], c[4], da[4], db[4], dc[4];
494 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
495 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
496 tpz[0] = tz*tz*tz; tpz[1] = tz*tz; tpz[2] = tz; tpz[3] = 1.0;
499 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
500 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
501 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
502 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
503 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
504 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
505 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
506 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
508 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
509 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
510 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
511 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
512 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
513 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
514 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
515 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
517 c[0] = (
Af[ 0]*tpz[0] +
Af[ 1]*tpz[1] +
Af[ 2]*tpz[2] +
Af[ 3]*tpz[3]);
518 c[1] = (
Af[ 4]*tpz[0] +
Af[ 5]*tpz[1] +
Af[ 6]*tpz[2] +
Af[ 7]*tpz[3]);
519 c[2] = (
Af[ 8]*tpz[0] +
Af[ 9]*tpz[1] +
Af[10]*tpz[2] +
Af[11]*tpz[3]);
520 c[3] = (
Af[12]*tpz[0] +
Af[13]*tpz[1] +
Af[14]*tpz[2] +
Af[15]*tpz[3]);
521 dc[0] = (
dAf[ 1]*tpz[1] +
dAf[ 2]*tpz[2] +
dAf[ 3]*tpz[3]);
522 dc[1] = (
dAf[ 5]*tpz[1] +
dAf[ 6]*tpz[2] +
dAf[ 7]*tpz[3]);
523 dc[2] = (
dAf[ 9]*tpz[1] +
dAf[10]*tpz[2] +
dAf[11]*tpz[3]);
524 dc[3] = (
dAf[13]*tpz[1] +
dAf[14]*tpz[2] +
dAf[15]*tpz[3]);
526 int xs = spline->x_stride;
527 int ys = spline->y_stride;
529 float dxInv = spline->x_grid.delta_inv;
530 float dyInv = spline->y_grid.delta_inv;
531 float dzInv = spline->z_grid.delta_inv;
533#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
534 cP[ 0] = (
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3]);
535 cP[ 1] = (
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3]);
536 cP[ 2] = (
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3]);
537 cP[ 3] = (
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]);
538 cP[ 4] = (
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3]);
539 cP[ 5] = (
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3]);
540 cP[ 6] = (
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3]);
541 cP[ 7] = (
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]);
542 cP[ 8] = (
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3]);
543 cP[ 9] = (
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3]);
544 cP[10] = (
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3]);
545 cP[11] = (
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]);
546 cP[12] = (
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3]);
547 cP[13] = (
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3]);
548 cP[14] = (
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3]);
549 cP[15] = (
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3]);
551 bcP[0] = ( b[0]*cP[ 0] + b[1]*cP[ 1] + b[2]*cP[ 2] + b[3]*cP[ 3]);
552 bcP[1] = ( b[0]*cP[ 4] + b[1]*cP[ 5] + b[2]*cP[ 6] + b[3]*cP[ 7]);
553 bcP[2] = ( b[0]*cP[ 8] + b[1]*cP[ 9] + b[2]*cP[10] + b[3]*cP[11]);
554 bcP[3] = ( b[0]*cP[12] + b[1]*cP[13] + b[2]*cP[14] + b[3]*cP[15]);
556 dbcP[0] = ( db[0]*cP[ 0] + db[1]*cP[ 1] + db[2]*cP[ 2] + db[3]*cP[ 3]);
557 dbcP[1] = ( db[0]*cP[ 4] + db[1]*cP[ 5] + db[2]*cP[ 6] + db[3]*cP[ 7]);
558 dbcP[2] = ( db[0]*cP[ 8] + db[1]*cP[ 9] + db[2]*cP[10] + db[3]*cP[11]);
559 dbcP[3] = ( db[0]*cP[12] + db[1]*cP[13] + db[2]*cP[14] + db[3]*cP[15]);
561 *val = ( a[0]*bcP[0] + a[1]*bcP[1] + a[2]*bcP[2] + a[3]*bcP[3]);
563 (da[0]*bcP[0] + da[1]*bcP[1] + da[2]*bcP[2] + da[3]*bcP[3]);
565 (a[0]*dbcP[0] + a[1]*dbcP[1] + a[2]*dbcP[2] + a[3]*dbcP[3]);
567 (a[0]*(b[0]*(
P(0,0,0)*dc[0]+
P(0,0,1)*dc[1]+
P(0,0,2)*dc[2]+
P(0,0,3)*dc[3])+
568 b[1]*(
P(0,1,0)*dc[0]+
P(0,1,1)*dc[1]+
P(0,1,2)*dc[2]+
P(0,1,3)*dc[3])+
569 b[2]*(
P(0,2,0)*dc[0]+
P(0,2,1)*dc[1]+
P(0,2,2)*dc[2]+
P(0,2,3)*dc[3])+
570 b[3]*(
P(0,3,0)*dc[0]+
P(0,3,1)*dc[1]+
P(0,3,2)*dc[2]+
P(0,3,3)*dc[3]))+
571 a[1]*(b[0]*(
P(1,0,0)*dc[0]+
P(1,0,1)*dc[1]+
P(1,0,2)*dc[2]+
P(1,0,3)*dc[3])+
572 b[1]*(
P(1,1,0)*dc[0]+
P(1,1,1)*dc[1]+
P(1,1,2)*dc[2]+
P(1,1,3)*dc[3])+
573 b[2]*(
P(1,2,0)*dc[0]+
P(1,2,1)*dc[1]+
P(1,2,2)*dc[2]+
P(1,2,3)*dc[3])+
574 b[3]*(
P(1,3,0)*dc[0]+
P(1,3,1)*dc[1]+
P(1,3,2)*dc[2]+
P(1,3,3)*dc[3]))+
575 a[2]*(b[0]*(
P(2,0,0)*dc[0]+
P(2,0,1)*dc[1]+
P(2,0,2)*dc[2]+
P(2,0,3)*dc[3])+
576 b[1]*(
P(2,1,0)*dc[0]+
P(2,1,1)*dc[1]+
P(2,1,2)*dc[2]+
P(2,1,3)*dc[3])+
577 b[2]*(
P(2,2,0)*dc[0]+
P(2,2,1)*dc[1]+
P(2,2,2)*dc[2]+
P(2,2,3)*dc[3])+
578 b[3]*(
P(2,3,0)*dc[0]+
P(2,3,1)*dc[1]+
P(2,3,2)*dc[2]+
P(2,3,3)*dc[3]))+
579 a[3]*(b[0]*(
P(3,0,0)*dc[0]+
P(3,0,1)*dc[1]+
P(3,0,2)*dc[2]+
P(3,0,3)*dc[3])+
580 b[1]*(
P(3,1,0)*dc[0]+
P(3,1,1)*dc[1]+
P(3,1,2)*dc[2]+
P(3,1,3)*dc[3])+
581 b[2]*(
P(3,2,0)*dc[0]+
P(3,2,1)*dc[1]+
P(3,2,2)*dc[2]+
P(3,2,3)*dc[3])+
582 b[3]*(
P(3,3,0)*dc[0]+
P(3,3,1)*dc[1]+
P(3,3,2)*dc[2]+
P(3,3,3)*dc[3])));
592 double x,
double y,
double z,
596 x -= spline->x_grid.start;
597 y -= spline->y_grid.start;
598 z -= spline->z_grid.start;
599 float ux = x*spline->x_grid.delta_inv;
600 float uy = y*spline->y_grid.delta_inv;
601 float uz = z*spline->z_grid.delta_inv;
602 float ipartx, iparty, ipartz, tx, ty, tz;
603 tx = modff (ux, &ipartx);
int ix = (int) ipartx;
604 ty = modff (uy, &iparty);
int iy = (int) iparty;
605 tz = modff (uz, &ipartz);
int iz = (int) ipartz;
607 float tpx[4], tpy[4], tpz[4], a[4], b[4], c[4], da[4], db[4], dc[4],
608 d2a[4], d2b[4], d2c[4];
609 complex_float cP[16], dcP[16], bcP[4], dbcP[4], d2bcP[4], bdcP[4];
610 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
611 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
612 tpz[0] = tz*tz*tz; tpz[1] = tz*tz; tpz[2] = tz; tpz[3] = 1.0;
615 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
616 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
617 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
618 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
619 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
620 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
621 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
622 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
623 d2a[0] = (
d2Af[ 2]*tpx[2] +
d2Af[ 3]*tpx[3]);
624 d2a[1] = (
d2Af[ 6]*tpx[2] +
d2Af[ 7]*tpx[3]);
625 d2a[2] = (
d2Af[10]*tpx[2] +
d2Af[11]*tpx[3]);
626 d2a[3] = (
d2Af[14]*tpx[2] +
d2Af[15]*tpx[3]);
628 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
629 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
630 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
631 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
632 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
633 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
634 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
635 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
636 d2b[0] = (
d2Af[ 2]*tpy[2] +
d2Af[ 3]*tpy[3]);
637 d2b[1] = (
d2Af[ 6]*tpy[2] +
d2Af[ 7]*tpy[3]);
638 d2b[2] = (
d2Af[10]*tpy[2] +
d2Af[11]*tpy[3]);
639 d2b[3] = (
d2Af[14]*tpy[2] +
d2Af[15]*tpy[3]);
641 c[0] = (
Af[ 0]*tpz[0] +
Af[ 1]*tpz[1] +
Af[ 2]*tpz[2] +
Af[ 3]*tpz[3]);
642 c[1] = (
Af[ 4]*tpz[0] +
Af[ 5]*tpz[1] +
Af[ 6]*tpz[2] +
Af[ 7]*tpz[3]);
643 c[2] = (
Af[ 8]*tpz[0] +
Af[ 9]*tpz[1] +
Af[10]*tpz[2] +
Af[11]*tpz[3]);
644 c[3] = (
Af[12]*tpz[0] +
Af[13]*tpz[1] +
Af[14]*tpz[2] +
Af[15]*tpz[3]);
645 dc[0] = (
dAf[ 1]*tpz[1] +
dAf[ 2]*tpz[2] +
dAf[ 3]*tpz[3]);
646 dc[1] = (
dAf[ 5]*tpz[1] +
dAf[ 6]*tpz[2] +
dAf[ 7]*tpz[3]);
647 dc[2] = (
dAf[ 9]*tpz[1] +
dAf[10]*tpz[2] +
dAf[11]*tpz[3]);
648 dc[3] = (
dAf[13]*tpz[1] +
dAf[14]*tpz[2] +
dAf[15]*tpz[3]);
649 d2c[0] = (
d2Af[ 2]*tpz[2] +
d2Af[ 3]*tpz[3]);
650 d2c[1] = (
d2Af[ 6]*tpz[2] +
d2Af[ 7]*tpz[3]);
651 d2c[2] = (
d2Af[10]*tpz[2] +
d2Af[11]*tpz[3]);
652 d2c[3] = (
d2Af[14]*tpz[2] +
d2Af[15]*tpz[3]);
654 int xs = spline->x_stride;
655 int ys = spline->y_stride;
657 float dxInv = spline->x_grid.delta_inv;
658 float dyInv = spline->y_grid.delta_inv;
659 float dzInv = spline->z_grid.delta_inv;
661#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
662 cP[ 0] = (
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3]);
663 cP[ 1] = (
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3]);
664 cP[ 2] = (
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3]);
665 cP[ 3] = (
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]);
666 cP[ 4] = (
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3]);
667 cP[ 5] = (
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3]);
668 cP[ 6] = (
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3]);
669 cP[ 7] = (
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]);
670 cP[ 8] = (
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3]);
671 cP[ 9] = (
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3]);
672 cP[10] = (
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3]);
673 cP[11] = (
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]);
674 cP[12] = (
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3]);
675 cP[13] = (
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3]);
676 cP[14] = (
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3]);
677 cP[15] = (
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3]);
679 dcP[ 0] = (
P(0,0,0)*dc[0]+
P(0,0,1)*dc[1]+
P(0,0,2)*dc[2]+
P(0,0,3)*dc[3]);
680 dcP[ 1] = (
P(0,1,0)*dc[0]+
P(0,1,1)*dc[1]+
P(0,1,2)*dc[2]+
P(0,1,3)*dc[3]);
681 dcP[ 2] = (
P(0,2,0)*dc[0]+
P(0,2,1)*dc[1]+
P(0,2,2)*dc[2]+
P(0,2,3)*dc[3]);
682 dcP[ 3] = (
P(0,3,0)*dc[0]+
P(0,3,1)*dc[1]+
P(0,3,2)*dc[2]+
P(0,3,3)*dc[3]);
683 dcP[ 4] = (
P(1,0,0)*dc[0]+
P(1,0,1)*dc[1]+
P(1,0,2)*dc[2]+
P(1,0,3)*dc[3]);
684 dcP[ 5] = (
P(1,1,0)*dc[0]+
P(1,1,1)*dc[1]+
P(1,1,2)*dc[2]+
P(1,1,3)*dc[3]);
685 dcP[ 6] = (
P(1,2,0)*dc[0]+
P(1,2,1)*dc[1]+
P(1,2,2)*dc[2]+
P(1,2,3)*dc[3]);
686 dcP[ 7] = (
P(1,3,0)*dc[0]+
P(1,3,1)*dc[1]+
P(1,3,2)*dc[2]+
P(1,3,3)*dc[3]);
687 dcP[ 8] = (
P(2,0,0)*dc[0]+
P(2,0,1)*dc[1]+
P(2,0,2)*dc[2]+
P(2,0,3)*dc[3]);
688 dcP[ 9] = (
P(2,1,0)*dc[0]+
P(2,1,1)*dc[1]+
P(2,1,2)*dc[2]+
P(2,1,3)*dc[3]);
689 dcP[10] = (
P(2,2,0)*dc[0]+
P(2,2,1)*dc[1]+
P(2,2,2)*dc[2]+
P(2,2,3)*dc[3]);
690 dcP[11] = (
P(2,3,0)*dc[0]+
P(2,3,1)*dc[1]+
P(2,3,2)*dc[2]+
P(2,3,3)*dc[3]);
691 dcP[12] = (
P(3,0,0)*dc[0]+
P(3,0,1)*dc[1]+
P(3,0,2)*dc[2]+
P(3,0,3)*dc[3]);
692 dcP[13] = (
P(3,1,0)*dc[0]+
P(3,1,1)*dc[1]+
P(3,1,2)*dc[2]+
P(3,1,3)*dc[3]);
693 dcP[14] = (
P(3,2,0)*dc[0]+
P(3,2,1)*dc[1]+
P(3,2,2)*dc[2]+
P(3,2,3)*dc[3]);
694 dcP[15] = (
P(3,3,0)*dc[0]+
P(3,3,1)*dc[1]+
P(3,3,2)*dc[2]+
P(3,3,3)*dc[3]);
696 bcP[0] = ( b[0]*cP[ 0] + b[1]*cP[ 1] + b[2]*cP[ 2] + b[3]*cP[ 3]);
697 bcP[1] = ( b[0]*cP[ 4] + b[1]*cP[ 5] + b[2]*cP[ 6] + b[3]*cP[ 7]);
698 bcP[2] = ( b[0]*cP[ 8] + b[1]*cP[ 9] + b[2]*cP[10] + b[3]*cP[11]);
699 bcP[3] = ( b[0]*cP[12] + b[1]*cP[13] + b[2]*cP[14] + b[3]*cP[15]);
701 dbcP[0] = ( db[0]*cP[ 0] + db[1]*cP[ 1] + db[2]*cP[ 2] + db[3]*cP[ 3]);
702 dbcP[1] = ( db[0]*cP[ 4] + db[1]*cP[ 5] + db[2]*cP[ 6] + db[3]*cP[ 7]);
703 dbcP[2] = ( db[0]*cP[ 8] + db[1]*cP[ 9] + db[2]*cP[10] + db[3]*cP[11]);
704 dbcP[3] = ( db[0]*cP[12] + db[1]*cP[13] + db[2]*cP[14] + db[3]*cP[15]);
706 bdcP[0] = ( b[0]*dcP[ 0] + b[1]*dcP[ 1] + b[2]*dcP[ 2] + b[3]*dcP[ 3]);
707 bdcP[1] = ( b[0]*dcP[ 4] + b[1]*dcP[ 5] + b[2]*dcP[ 6] + b[3]*dcP[ 7]);
708 bdcP[2] = ( b[0]*dcP[ 8] + b[1]*dcP[ 9] + b[2]*dcP[10] + b[3]*dcP[11]);
709 bdcP[3] = ( b[0]*dcP[12] + b[1]*dcP[13] + b[2]*dcP[14] + b[3]*dcP[15]);
711 d2bcP[0] = ( d2b[0]*cP[ 0] + d2b[1]*cP[ 1] + d2b[2]*cP[ 2] + d2b[3]*cP[ 3]);
712 d2bcP[1] = ( d2b[0]*cP[ 4] + d2b[1]*cP[ 5] + d2b[2]*cP[ 6] + d2b[3]*cP[ 7]);
713 d2bcP[2] = ( d2b[0]*cP[ 8] + d2b[1]*cP[ 9] + d2b[2]*cP[10] + d2b[3]*cP[11]);
714 d2bcP[3] = ( d2b[0]*cP[12] + d2b[1]*cP[13] + d2b[2]*cP[14] + d2b[3]*cP[15]);
718 ( a[0]*bcP[0] + a[1]*bcP[1] + a[2]*bcP[2] + a[3]*bcP[3]);
721 (da[0]*bcP[0] + da[1]*bcP[1] + da[2]*bcP[2] + da[3]*bcP[3]);
723 (a[0]*dbcP[0] + a[1]*dbcP[1] + a[2]*dbcP[2] + a[3]*dbcP[3]);
725 (a[0]*bdcP[0] + a[1]*bdcP[1] + a[2]*bdcP[2] + a[3]*bdcP[3]);
729 (d2a[0]*bcP[0] + d2a[1]*bcP[1] + d2a[2]*bcP[2] + d2a[3]*bcP[3])
732 (a[0]*d2bcP[0] + a[1]*d2bcP[1] + a[2]*d2bcP[2] + a[3]*d2bcP[3]) +
735 (a[0]*(b[0]*(
P(0,0,0)*d2c[0]+
P(0,0,1)*d2c[1]+
P(0,0,2)*d2c[2]+
P(0,0,3)*d2c[3])+
736 b[1]*(
P(0,1,0)*d2c[0]+
P(0,1,1)*d2c[1]+
P(0,1,2)*d2c[2]+
P(0,1,3)*d2c[3])+
737 b[2]*(
P(0,2,0)*d2c[0]+
P(0,2,1)*d2c[1]+
P(0,2,2)*d2c[2]+
P(0,2,3)*d2c[3])+
738 b[3]*(
P(0,3,0)*d2c[0]+
P(0,3,1)*d2c[1]+
P(0,3,2)*d2c[2]+
P(0,3,3)*d2c[3]))+
739 a[1]*(b[0]*(
P(1,0,0)*d2c[0]+
P(1,0,1)*d2c[1]+
P(1,0,2)*d2c[2]+
P(1,0,3)*d2c[3])+
740 b[1]*(
P(1,1,0)*d2c[0]+
P(1,1,1)*d2c[1]+
P(1,1,2)*d2c[2]+
P(1,1,3)*d2c[3])+
741 b[2]*(
P(1,2,0)*d2c[0]+
P(1,2,1)*d2c[1]+
P(1,2,2)*d2c[2]+
P(1,2,3)*d2c[3])+
742 b[3]*(
P(1,3,0)*d2c[0]+
P(1,3,1)*d2c[1]+
P(1,3,2)*d2c[2]+
P(1,3,3)*d2c[3]))+
743 a[2]*(b[0]*(
P(2,0,0)*d2c[0]+
P(2,0,1)*d2c[1]+
P(2,0,2)*d2c[2]+
P(2,0,3)*d2c[3])+
744 b[1]*(
P(2,1,0)*d2c[0]+
P(2,1,1)*d2c[1]+
P(2,1,2)*d2c[2]+
P(2,1,3)*d2c[3])+
745 b[2]*(
P(2,2,0)*d2c[0]+
P(2,2,1)*d2c[1]+
P(2,2,2)*d2c[2]+
P(2,2,3)*d2c[3])+
746 b[3]*(
P(2,3,0)*d2c[0]+
P(2,3,1)*d2c[1]+
P(2,3,2)*d2c[2]+
P(2,3,3)*d2c[3]))+
747 a[3]*(b[0]*(
P(3,0,0)*d2c[0]+
P(3,0,1)*d2c[1]+
P(3,0,2)*d2c[2]+
P(3,0,3)*d2c[3])+
748 b[1]*(
P(3,1,0)*d2c[0]+
P(3,1,1)*d2c[1]+
P(3,1,2)*d2c[2]+
P(3,1,3)*d2c[3])+
749 b[2]*(
P(3,2,0)*d2c[0]+
P(3,2,1)*d2c[1]+
P(3,2,2)*d2c[2]+
P(3,2,3)*d2c[3])+
750 b[3]*(
P(3,3,0)*d2c[0]+
P(3,3,1)*d2c[1]+
P(3,3,2)*d2c[2]+
P(3,3,3)*d2c[3])));
762 double x,
double y,
double z,
766 x -= spline->x_grid.start;
767 y -= spline->y_grid.start;
768 z -= spline->z_grid.start;
769 float ux = x*spline->x_grid.delta_inv;
770 float uy = y*spline->y_grid.delta_inv;
771 float uz = z*spline->z_grid.delta_inv;
772 ux =
fmin (ux, (
double)(spline->x_grid.num)-1.0e-5);
773 uy =
fmin (uy, (
double)(spline->y_grid.num)-1.0e-5);
774 uz =
fmin (uz, (
double)(spline->z_grid.num)-1.0e-5);
775 float ipartx, iparty, ipartz, tx, ty, tz;
776 tx = modff (ux, &ipartx);
int ix = (int) ipartx;
777 ty = modff (uy, &iparty);
int iy = (int) iparty;
778 tz = modff (uz, &ipartz);
int iz = (int) ipartz;
780 float tpx[4], tpy[4], tpz[4], a[4], b[4], c[4], da[4], db[4], dc[4],
781 d2a[4], d2b[4], d2c[4];
783 d2bcP[4], dbdcP[4], bd2cP[4], bdcP[4];
784 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
785 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
786 tpz[0] = tz*tz*tz; tpz[1] = tz*tz; tpz[2] = tz; tpz[3] = 1.0;
789 a[0] = (
Af[ 0]*tpx[0] +
Af[ 1]*tpx[1] +
Af[ 2]*tpx[2] +
Af[ 3]*tpx[3]);
790 a[1] = (
Af[ 4]*tpx[0] +
Af[ 5]*tpx[1] +
Af[ 6]*tpx[2] +
Af[ 7]*tpx[3]);
791 a[2] = (
Af[ 8]*tpx[0] +
Af[ 9]*tpx[1] +
Af[10]*tpx[2] +
Af[11]*tpx[3]);
792 a[3] = (
Af[12]*tpx[0] +
Af[13]*tpx[1] +
Af[14]*tpx[2] +
Af[15]*tpx[3]);
793 da[0] = (
dAf[ 1]*tpx[1] +
dAf[ 2]*tpx[2] +
dAf[ 3]*tpx[3]);
794 da[1] = (
dAf[ 5]*tpx[1] +
dAf[ 6]*tpx[2] +
dAf[ 7]*tpx[3]);
795 da[2] = (
dAf[ 9]*tpx[1] +
dAf[10]*tpx[2] +
dAf[11]*tpx[3]);
796 da[3] = (
dAf[13]*tpx[1] +
dAf[14]*tpx[2] +
dAf[15]*tpx[3]);
797 d2a[0] = (
d2Af[ 2]*tpx[2] +
d2Af[ 3]*tpx[3]);
798 d2a[1] = (
d2Af[ 6]*tpx[2] +
d2Af[ 7]*tpx[3]);
799 d2a[2] = (
d2Af[10]*tpx[2] +
d2Af[11]*tpx[3]);
800 d2a[3] = (
d2Af[14]*tpx[2] +
d2Af[15]*tpx[3]);
802 b[0] = (
Af[ 0]*tpy[0] +
Af[ 1]*tpy[1] +
Af[ 2]*tpy[2] +
Af[ 3]*tpy[3]);
803 b[1] = (
Af[ 4]*tpy[0] +
Af[ 5]*tpy[1] +
Af[ 6]*tpy[2] +
Af[ 7]*tpy[3]);
804 b[2] = (
Af[ 8]*tpy[0] +
Af[ 9]*tpy[1] +
Af[10]*tpy[2] +
Af[11]*tpy[3]);
805 b[3] = (
Af[12]*tpy[0] +
Af[13]*tpy[1] +
Af[14]*tpy[2] +
Af[15]*tpy[3]);
806 db[0] = (
dAf[ 1]*tpy[1] +
dAf[ 2]*tpy[2] +
dAf[ 3]*tpy[3]);
807 db[1] = (
dAf[ 5]*tpy[1] +
dAf[ 6]*tpy[2] +
dAf[ 7]*tpy[3]);
808 db[2] = (
dAf[ 9]*tpy[1] +
dAf[10]*tpy[2] +
dAf[11]*tpy[3]);
809 db[3] = (
dAf[13]*tpy[1] +
dAf[14]*tpy[2] +
dAf[15]*tpy[3]);
810 d2b[0] = (
d2Af[ 2]*tpy[2] +
d2Af[ 3]*tpy[3]);
811 d2b[1] = (
d2Af[ 6]*tpy[2] +
d2Af[ 7]*tpy[3]);
812 d2b[2] = (
d2Af[10]*tpy[2] +
d2Af[11]*tpy[3]);
813 d2b[3] = (
d2Af[14]*tpy[2] +
d2Af[15]*tpy[3]);
815 c[0] = (
Af[ 0]*tpz[0] +
Af[ 1]*tpz[1] +
Af[ 2]*tpz[2] +
Af[ 3]*tpz[3]);
816 c[1] = (
Af[ 4]*tpz[0] +
Af[ 5]*tpz[1] +
Af[ 6]*tpz[2] +
Af[ 7]*tpz[3]);
817 c[2] = (
Af[ 8]*tpz[0] +
Af[ 9]*tpz[1] +
Af[10]*tpz[2] +
Af[11]*tpz[3]);
818 c[3] = (
Af[12]*tpz[0] +
Af[13]*tpz[1] +
Af[14]*tpz[2] +
Af[15]*tpz[3]);
819 dc[0] = (
dAf[ 1]*tpz[1] +
dAf[ 2]*tpz[2] +
dAf[ 3]*tpz[3]);
820 dc[1] = (
dAf[ 5]*tpz[1] +
dAf[ 6]*tpz[2] +
dAf[ 7]*tpz[3]);
821 dc[2] = (
dAf[ 9]*tpz[1] +
dAf[10]*tpz[2] +
dAf[11]*tpz[3]);
822 dc[3] = (
dAf[13]*tpz[1] +
dAf[14]*tpz[2] +
dAf[15]*tpz[3]);
823 d2c[0] = (
d2Af[ 2]*tpz[2] +
d2Af[ 3]*tpz[3]);
824 d2c[1] = (
d2Af[ 6]*tpz[2] +
d2Af[ 7]*tpz[3]);
825 d2c[2] = (
d2Af[10]*tpz[2] +
d2Af[11]*tpz[3]);
826 d2c[3] = (
d2Af[14]*tpz[2] +
d2Af[15]*tpz[3]);
828 int xs = spline->x_stride;
829 int ys = spline->y_stride;
830 int offmax = (ix+3)*xs + (iy+3)*ys + iz+3;
832 float dxInv = spline->x_grid.delta_inv;
833 float dyInv = spline->y_grid.delta_inv;
834 float dzInv = spline->z_grid.delta_inv;
836#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
837 cP[ 0] = (
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3]);
838 cP[ 1] = (
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3]);
839 cP[ 2] = (
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3]);
840 cP[ 3] = (
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]);
841 cP[ 4] = (
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3]);
842 cP[ 5] = (
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3]);
843 cP[ 6] = (
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3]);
844 cP[ 7] = (
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]);
845 cP[ 8] = (
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3]);
846 cP[ 9] = (
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3]);
847 cP[10] = (
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3]);
848 cP[11] = (
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]);
849 cP[12] = (
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3]);
850 cP[13] = (
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3]);
851 cP[14] = (
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3]);
852 cP[15] = (
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3]);
854 dcP[ 0] = (
P(0,0,0)*dc[0]+
P(0,0,1)*dc[1]+
P(0,0,2)*dc[2]+
P(0,0,3)*dc[3]);
855 dcP[ 1] = (
P(0,1,0)*dc[0]+
P(0,1,1)*dc[1]+
P(0,1,2)*dc[2]+
P(0,1,3)*dc[3]);
856 dcP[ 2] = (
P(0,2,0)*dc[0]+
P(0,2,1)*dc[1]+
P(0,2,2)*dc[2]+
P(0,2,3)*dc[3]);
857 dcP[ 3] = (
P(0,3,0)*dc[0]+
P(0,3,1)*dc[1]+
P(0,3,2)*dc[2]+
P(0,3,3)*dc[3]);
858 dcP[ 4] = (
P(1,0,0)*dc[0]+
P(1,0,1)*dc[1]+
P(1,0,2)*dc[2]+
P(1,0,3)*dc[3]);
859 dcP[ 5] = (
P(1,1,0)*dc[0]+
P(1,1,1)*dc[1]+
P(1,1,2)*dc[2]+
P(1,1,3)*dc[3]);
860 dcP[ 6] = (
P(1,2,0)*dc[0]+
P(1,2,1)*dc[1]+
P(1,2,2)*dc[2]+
P(1,2,3)*dc[3]);
861 dcP[ 7] = (
P(1,3,0)*dc[0]+
P(1,3,1)*dc[1]+
P(1,3,2)*dc[2]+
P(1,3,3)*dc[3]);
862 dcP[ 8] = (
P(2,0,0)*dc[0]+
P(2,0,1)*dc[1]+
P(2,0,2)*dc[2]+
P(2,0,3)*dc[3]);
863 dcP[ 9] = (
P(2,1,0)*dc[0]+
P(2,1,1)*dc[1]+
P(2,1,2)*dc[2]+
P(2,1,3)*dc[3]);
864 dcP[10] = (
P(2,2,0)*dc[0]+
P(2,2,1)*dc[1]+
P(2,2,2)*dc[2]+
P(2,2,3)*dc[3]);
865 dcP[11] = (
P(2,3,0)*dc[0]+
P(2,3,1)*dc[1]+
P(2,3,2)*dc[2]+
P(2,3,3)*dc[3]);
866 dcP[12] = (
P(3,0,0)*dc[0]+
P(3,0,1)*dc[1]+
P(3,0,2)*dc[2]+
P(3,0,3)*dc[3]);
867 dcP[13] = (
P(3,1,0)*dc[0]+
P(3,1,1)*dc[1]+
P(3,1,2)*dc[2]+
P(3,1,3)*dc[3]);
868 dcP[14] = (
P(3,2,0)*dc[0]+
P(3,2,1)*dc[1]+
P(3,2,2)*dc[2]+
P(3,2,3)*dc[3]);
869 dcP[15] = (
P(3,3,0)*dc[0]+
P(3,3,1)*dc[1]+
P(3,3,2)*dc[2]+
P(3,3,3)*dc[3]);
871 d2cP[ 0] = (
P(0,0,0)*d2c[0]+
P(0,0,1)*d2c[1]+
P(0,0,2)*d2c[2]+
P(0,0,3)*d2c[3]);
872 d2cP[ 1] = (
P(0,1,0)*d2c[0]+
P(0,1,1)*d2c[1]+
P(0,1,2)*d2c[2]+
P(0,1,3)*d2c[3]);
873 d2cP[ 2] = (
P(0,2,0)*d2c[0]+
P(0,2,1)*d2c[1]+
P(0,2,2)*d2c[2]+
P(0,2,3)*d2c[3]);
874 d2cP[ 3] = (
P(0,3,0)*d2c[0]+
P(0,3,1)*d2c[1]+
P(0,3,2)*d2c[2]+
P(0,3,3)*d2c[3]);
875 d2cP[ 4] = (
P(1,0,0)*d2c[0]+
P(1,0,1)*d2c[1]+
P(1,0,2)*d2c[2]+
P(1,0,3)*d2c[3]);
876 d2cP[ 5] = (
P(1,1,0)*d2c[0]+
P(1,1,1)*d2c[1]+
P(1,1,2)*d2c[2]+
P(1,1,3)*d2c[3]);
877 d2cP[ 6] = (
P(1,2,0)*d2c[0]+
P(1,2,1)*d2c[1]+
P(1,2,2)*d2c[2]+
P(1,2,3)*d2c[3]);
878 d2cP[ 7] = (
P(1,3,0)*d2c[0]+
P(1,3,1)*d2c[1]+
P(1,3,2)*d2c[2]+
P(1,3,3)*d2c[3]);
879 d2cP[ 8] = (
P(2,0,0)*d2c[0]+
P(2,0,1)*d2c[1]+
P(2,0,2)*d2c[2]+
P(2,0,3)*d2c[3]);
880 d2cP[ 9] = (
P(2,1,0)*d2c[0]+
P(2,1,1)*d2c[1]+
P(2,1,2)*d2c[2]+
P(2,1,3)*d2c[3]);
881 d2cP[10] = (
P(2,2,0)*d2c[0]+
P(2,2,1)*d2c[1]+
P(2,2,2)*d2c[2]+
P(2,2,3)*d2c[3]);
882 d2cP[11] = (
P(2,3,0)*d2c[0]+
P(2,3,1)*d2c[1]+
P(2,3,2)*d2c[2]+
P(2,3,3)*d2c[3]);
883 d2cP[12] = (
P(3,0,0)*d2c[0]+
P(3,0,1)*d2c[1]+
P(3,0,2)*d2c[2]+
P(3,0,3)*d2c[3]);
884 d2cP[13] = (
P(3,1,0)*d2c[0]+
P(3,1,1)*d2c[1]+
P(3,1,2)*d2c[2]+
P(3,1,3)*d2c[3]);
885 d2cP[14] = (
P(3,2,0)*d2c[0]+
P(3,2,1)*d2c[1]+
P(3,2,2)*d2c[2]+
P(3,2,3)*d2c[3]);
886 d2cP[15] = (
P(3,3,0)*d2c[0]+
P(3,3,1)*d2c[1]+
P(3,3,2)*d2c[2]+
P(3,3,3)*d2c[3]);
888 bcP[0] = ( b[0]*cP[ 0] + b[1]*cP[ 1] + b[2]*cP[ 2] + b[3]*cP[ 3]);
889 bcP[1] = ( b[0]*cP[ 4] + b[1]*cP[ 5] + b[2]*cP[ 6] + b[3]*cP[ 7]);
890 bcP[2] = ( b[0]*cP[ 8] + b[1]*cP[ 9] + b[2]*cP[10] + b[3]*cP[11]);
891 bcP[3] = ( b[0]*cP[12] + b[1]*cP[13] + b[2]*cP[14] + b[3]*cP[15]);
893 dbcP[0] = ( db[0]*cP[ 0] + db[1]*cP[ 1] + db[2]*cP[ 2] + db[3]*cP[ 3]);
894 dbcP[1] = ( db[0]*cP[ 4] + db[1]*cP[ 5] + db[2]*cP[ 6] + db[3]*cP[ 7]);
895 dbcP[2] = ( db[0]*cP[ 8] + db[1]*cP[ 9] + db[2]*cP[10] + db[3]*cP[11]);
896 dbcP[3] = ( db[0]*cP[12] + db[1]*cP[13] + db[2]*cP[14] + db[3]*cP[15]);
898 bdcP[0] = ( b[0]*dcP[ 0] + b[1]*dcP[ 1] + b[2]*dcP[ 2] + b[3]*dcP[ 3]);
899 bdcP[1] = ( b[0]*dcP[ 4] + b[1]*dcP[ 5] + b[2]*dcP[ 6] + b[3]*dcP[ 7]);
900 bdcP[2] = ( b[0]*dcP[ 8] + b[1]*dcP[ 9] + b[2]*dcP[10] + b[3]*dcP[11]);
901 bdcP[3] = ( b[0]*dcP[12] + b[1]*dcP[13] + b[2]*dcP[14] + b[3]*dcP[15]);
903 bd2cP[0] = ( b[0]*d2cP[ 0] + b[1]*d2cP[ 1] + b[2]*d2cP[ 2] + b[3]*d2cP[ 3]);
904 bd2cP[1] = ( b[0]*d2cP[ 4] + b[1]*d2cP[ 5] + b[2]*d2cP[ 6] + b[3]*d2cP[ 7]);
905 bd2cP[2] = ( b[0]*d2cP[ 8] + b[1]*d2cP[ 9] + b[2]*d2cP[10] + b[3]*d2cP[11]);
906 bd2cP[3] = ( b[0]*d2cP[12] + b[1]*d2cP[13] + b[2]*d2cP[14] + b[3]*d2cP[15]);
908 d2bcP[0] = ( d2b[0]*cP[ 0] + d2b[1]*cP[ 1] + d2b[2]*cP[ 2] + d2b[3]*cP[ 3]);
909 d2bcP[1] = ( d2b[0]*cP[ 4] + d2b[1]*cP[ 5] + d2b[2]*cP[ 6] + d2b[3]*cP[ 7]);
910 d2bcP[2] = ( d2b[0]*cP[ 8] + d2b[1]*cP[ 9] + d2b[2]*cP[10] + d2b[3]*cP[11]);
911 d2bcP[3] = ( d2b[0]*cP[12] + d2b[1]*cP[13] + d2b[2]*cP[14] + d2b[3]*cP[15]);
913 dbdcP[0] = ( db[0]*dcP[ 0] + db[1]*dcP[ 1] + db[2]*dcP[ 2] + db[3]*dcP[ 3]);
914 dbdcP[1] = ( db[0]*dcP[ 4] + db[1]*dcP[ 5] + db[2]*dcP[ 6] + db[3]*dcP[ 7]);
915 dbdcP[2] = ( db[0]*dcP[ 8] + db[1]*dcP[ 9] + db[2]*dcP[10] + db[3]*dcP[11]);
916 dbdcP[3] = ( db[0]*dcP[12] + db[1]*dcP[13] + db[2]*dcP[14] + db[3]*dcP[15]);
918 *val = a[0]*bcP[0] + a[1]*bcP[1] + a[2]*bcP[2] + a[3]*bcP[3];
920 (da[0] *bcP[0] + da[1]*bcP[1] + da[2]*bcP[2] + da[3]*bcP[3]);
922 (a[0]*dbcP[0] + a[1]*dbcP[1] + a[2]*dbcP[2] + a[3]*dbcP[3]);
924 (a[0]*bdcP[0] + a[1]*bdcP[1] + a[2]*bdcP[2] + a[3]*bdcP[3]);
926 hess[0] = dxInv * dxInv *
927 (d2a[0]*bcP[0] + d2a[1]*bcP[1] + d2a[2]*bcP[2] + d2a[3]*bcP[3]);
929 hess[1] = dxInv * dyInv *
930 (da[0]*dbcP[0] + da[1]*dbcP[1] + da[2]*dbcP[2] + da[3]*dbcP[3]);
933 hess[2] = dxInv * dzInv *
934 (da[0]*bdcP[0] + da[1]*bdcP[1] + da[2]*bdcP[2] + da[3]*bdcP[3]);
937 hess[4] = dyInv * dyInv *
938 (a[0]*d2bcP[0] + a[1]*d2bcP[1] + a[2]*d2bcP[2] + a[3]*d2bcP[3]);
940 hess[5] = dyInv * dzInv *
941 (a[0]*dbdcP[0] + a[1]*dbdcP[1] + a[2]*dbdcP[2] + a[3]*dbdcP[3]);
944 hess[8] = dzInv * dzInv *
945 (a[0]*bd2cP[0] + a[1]*bd2cP[1] + a[2]*bd2cP[2] + a[3]*bd2cP[3]);