1207{
1208 typedef typename Data_T::BaseType T;
1209
1211
1212
1213
1214
1215
1216 Data_T ret;
1217
1218
1219
1220 V3d clampedVsP(std::max(0.5, vsP.x),
1221 std::max(0.5, vsP.y),
1222 std::max(0.5, vsP.z));
1224 clampedVsP.y - 0.5,
1225 clampedVsP.z - 0.5);
1226
1227
1228 V3i c(
static_cast<int>(
floor(p.x)),
1229 static_cast<int>(
floor(p.y)),
1230 static_cast<int>(
floor(p.z)));
1231
1233
1234 {
1235
1236 int im, jm, km;
1237 im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x + 1));
1238 jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y));
1239 km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z));
1240 int im_1, jm_1, km_1;
1241 im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x + 1));
1242 jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y));
1243 km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z));
1244 int im1, jm1, km1;
1245 im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x + 1));
1246 jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y));
1247 km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z));
1248 int im2, jm2, km2;
1249 im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x + 1));
1250 jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y));
1251 km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z));
1252
1254 data.
u(im_1, jm_1, km),
1255 data.
u(im_1, jm_1, km1),
1256 data.
u(im_1, jm_1, km2), t.z);
1258 data.
u(im_1, jm, km),
1259 data.
u(im_1, jm, km1),
1260 data.
u(im_1, jm, km2), t.z);
1262 data.
u(im_1, jm1, km),
1263 data.
u(im_1, jm1, km1),
1264 data.
u(im_1, jm1, km2), t.z);
1266 data.
u(im_1, jm2, km),
1267 data.
u(im_1, jm2, km1),
1268 data.
u(im_1, jm2, km2), t.z);
1269
1271 data.
u(im, jm_1, km),
1272 data.
u(im, jm_1, km1),
1273 data.
u(im, jm_1, km2), t.z);
1276 data.
u(im, jm, km1),
1277 data.
u(im, jm, km2), t.z);
1279 data.
u(im, jm1, km),
1280 data.
u(im, jm1, km1),
1281 data.
u(im, jm1, km2), t.z);
1283 data.
u(im, jm2, km),
1284 data.
u(im, jm2, km1),
1285 data.
u(im, jm2, km2), t.z);
1286
1288 data.
u(im1, jm_1, km),
1289 data.
u(im1, jm_1, km1),
1290 data.
u(im1, jm_1, km2), t.z);
1292 data.
u(im1, jm, km),
1293 data.
u(im1, jm, km1),
1294 data.
u(im1, jm, km2), t.z);
1296 data.
u(im1, jm1, km),
1297 data.
u(im1, jm1, km1),
1298 data.
u(im1, jm1, km2), t.z);
1300 data.
u(im1, jm2, km),
1301 data.
u(im1, jm2, km1),
1302 data.
u(im1, jm2, km2), t.z);
1303
1305 data.
u(im2, jm_1, km),
1306 data.
u(im2, jm_1, km1),
1307 data.
u(im2, jm_1, km2), t.z);
1309 data.
u(im2, jm, km),
1310 data.
u(im2, jm, km1),
1311 data.
u(im2, jm, km2), t.z);
1313 data.
u(im2, jm1, km),
1314 data.
u(im2, jm1, km1),
1315 data.
u(im2, jm1, km2), t.z);
1317 data.
u(im2, jm2, km),
1318 data.
u(im2, jm2, km1),
1319 data.
u(im2, jm2, km2), t.z);
1320
1325
1327 }
1328
1329
1330
1331
1332 p.setValue(clampedVsP.x - 0.5, vsP.y , clampedVsP.z - 0.5);
1333
1334
1335 c.x =
static_cast<int>(
floor(p.x));
1336 c.y =
static_cast<int>(
floor(p.y));
1337 c.z =
static_cast<int>(
floor(p.z));
1338
1340 {
1341
1342 int im, jm, km;
1343 im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x));
1344 jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y + 1));
1345 km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z));
1346 int im_1, jm_1, km_1;
1347 im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x));
1348 jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y + 1));
1349 km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z));
1350 int im1, jm1, km1;
1351 im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x));
1352 jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y + 1));
1353 km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z));
1354 int im2, jm2, km2;
1355 im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x));
1356 jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y + 1));
1357 km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z));
1358
1360 data.
v(im_1, jm_1, km),
1361 data.
v(im_1, jm_1, km1),
1362 data.
v(im_1, jm_1, km2), t.z);
1364 data.
v(im_1, jm, km),
1365 data.
v(im_1, jm, km1),
1366 data.
v(im_1, jm, km2), t.z);
1368 data.
v(im_1, jm1, km),
1369 data.
v(im_1, jm1, km1),
1370 data.
v(im_1, jm1, km2), t.z);
1372 data.
v(im_1, jm2, km),
1373 data.
v(im_1, jm2, km1),
1374 data.
v(im_1, jm2, km2), t.z);
1375
1377 data.
v(im, jm_1, km),
1378 data.
v(im, jm_1, km1),
1379 data.
v(im, jm_1, km2), t.z);
1382 data.
v(im, jm, km1),
1383 data.
v(im, jm, km2), t.z);
1385 data.
v(im, jm1, km),
1386 data.
v(im, jm1, km1),
1387 data.
v(im, jm1, km2), t.z);
1389 data.
v(im, jm2, km),
1390 data.
v(im, jm2, km1),
1391 data.
v(im, jm2, km2), t.z);
1392
1394 data.
v(im1, jm_1, km),
1395 data.
v(im1, jm_1, km1),
1396 data.
v(im1, jm_1, km2), t.z);
1398 data.
v(im1, jm, km),
1399 data.
v(im1, jm, km1),
1400 data.
v(im1, jm, km2), t.z);
1402 data.
v(im1, jm1, km),
1403 data.
v(im1, jm1, km1),
1404 data.
v(im1, jm1, km2), t.z);
1406 data.
v(im1, jm2, km),
1407 data.
v(im1, jm2, km1),
1408 data.
v(im1, jm2, km2), t.z);
1409
1411 data.
v(im2, jm_1, km),
1412 data.
v(im2, jm_1, km1),
1413 data.
v(im2, jm_1, km2), t.z);
1415 data.
v(im2, jm, km),
1416 data.
v(im2, jm, km1),
1417 data.
v(im2, jm, km2), t.z);
1419 data.
v(im2, jm1, km),
1420 data.
v(im2, jm1, km1),
1421 data.
v(im2, jm1, km2), t.z);
1423 data.
v(im2, jm2, km),
1424 data.
v(im2, jm2, km1),
1425 data.
v(im2, jm2, km2), t.z);
1426
1431
1433 }
1434
1435
1436
1437 p.setValue(clampedVsP.x - 0.5 , clampedVsP.y - 0.5, vsP.z);
1438
1439
1440 c.x =
static_cast<int>(
floor(p.x));
1441 c.y =
static_cast<int>(
floor(p.y));
1442 c.z =
static_cast<int>(
floor(p.z));
1443
1445 {
1446
1447 int im, jm, km;
1448 im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x));
1449 jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y));
1450 km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z + 1));
1451 int im_1, jm_1, km_1;
1452 im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x));
1453 jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y));
1454 km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z + 1));
1455 int im1, jm1, km1;
1456 im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x));
1457 jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y));
1458 km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z + 1));
1459 int im2, jm2, km2;
1460 im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x));
1461 jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y));
1462 km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z + 1));
1463
1465 data.
w(im_1, jm_1, km),
1466 data.
w(im_1, jm_1, km1),
1467 data.
w(im_1, jm_1, km2), t.z);
1469 data.
w(im_1, jm, km),
1470 data.
w(im_1, jm, km1),
1471 data.
w(im_1, jm, km2), t.z);
1473 data.
w(im_1, jm1, km),
1474 data.
w(im_1, jm1, km1),
1475 data.
w(im_1, jm1, km2), t.z);
1477 data.
w(im_1, jm2, km),
1478 data.
w(im_1, jm2, km1),
1479 data.
w(im_1, jm2, km2), t.z);
1480
1482 data.
w(im, jm_1, km),
1483 data.
w(im, jm_1, km1),
1484 data.
w(im, jm_1, km2), t.z);
1487 data.
w(im, jm, km1),
1488 data.
w(im, jm, km2), t.z);
1490 data.
w(im, jm1, km),
1491 data.
w(im, jm1, km1),
1492 data.
w(im, jm1, km2), t.z);
1494 data.
w(im, jm2, km),
1495 data.
w(im, jm2, km1),
1496 data.
w(im, jm2, km2), t.z);
1497
1499 data.
w(im1, jm_1, km),
1500 data.
w(im1, jm_1, km1),
1501 data.
w(im1, jm_1, km2), t.z);
1503 data.
w(im1, jm, km),
1504 data.
w(im1, jm, km1),
1505 data.
w(im1, jm, km2), t.z);
1507 data.
w(im1, jm1, km),
1508 data.
w(im1, jm1, km1),
1509 data.
w(im1, jm1, km2), t.z);
1511 data.
w(im1, jm2, km),
1512 data.
w(im1, jm2, km1),
1513 data.
w(im1, jm2, km2), t.z);
1514
1516 data.
w(im2, jm_1, km),
1517 data.
w(im2, jm_1, km1),
1518 data.
w(im2, jm_1, km2), t.z);
1520 data.
w(im2, jm, km),
1521 data.
w(im2, jm, km1),
1522 data.
w(im2, jm, km2), t.z);
1524 data.
w(im2, jm1, km),
1525 data.
w(im2, jm1, km1),
1526 data.
w(im2, jm1, km2), t.z);
1528 data.
w(im2, jm2, km),
1529 data.
w(im2, jm2, km1),
1530 data.
w(im2, jm2, km2), t.z);
1531
1536
1538 }
1539
1540 return ret;
1541}
Data_T monotonicCubicInterpolant(const Data_T &f1, const Data_T &f2, const Data_T &f3, const Data_T &f4, double t)
Monotonic cubic interpolation References: http://en.wikipedia.org/wiki/Monotone_cubic_interpolation h...
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
const real_t & w(int i, int j, int k) const
Read access to value on w-facing wall.
const real_t & u(int i, int j, int k) const
Read access to value on u-facing wall.
const real_t & v(int i, int j, int k) const
Read access to value on v-facing wall.
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.