Functions | |
elseif (isvector(x)&&isvector(y)&&isvector(z)) x | |
else | error ("x, y, z have wrong dimensions") |
endif | if (size(val)!=[length(x), length(y), length(z)]) error("val has wrong dimensions") |
endif | if (size(v, 2)!=3) error("v has to be N*3 matrix") |
endif | if (!ischar(req)) error("Invalid request parameter use 'values' |
endif | if (isempty(v)) Vxyz |
otherwise | error ("Invalid request type '%s', use 'values', 'normals' or 'normals8'", req) |
idx (:, 2) | |
frac (:, 2) | |
idx (:, 1) | |
frac (:, 1) | |
idx (:, 3) | |
frac (:, 3) | |
Variables | |
function [Vxyz, idx, frac] | |
y = squeeze (y(:,1,1))(:) | |
z = squeeze (z(1,1,:))(:) | |
endif normals or | normals8 = cube_idx (x, y, z, v) |
return endif switch req case | values [Vxyz, idx, frac] = interp_cube_trilin (x, y, z, val, v) |
case | normals [idx, frac] = cube_idx (x, y, z, v) |
dx = x(2:end) - x(1:end-1) | |
dy = y(2:end) - y(1:end-1) | |
dz = z(2:end) - z(1:end-1) | |
dz(end)](idx( | p000 = [v(:, 1) - dx, v(:, 2) - dy, v(:, 3) - dz] |
p100 = [v(:, 1) + dx, v(:, 2) - dy, v(:, 3) - dz] | |
p010 = [v(:, 1) - dx, v(:, 2) + dy, v(:, 3) - dz] | |
p001 = [v(:, 1) - dx, v(:, 2) - dy, v(:, 3) + dz] | |
p011 = [v(:, 1) - dx, v(:, 2) + dy, v(:, 3) + dz] | |
p101 = [v(:, 1) + dx, v(:, 2) - dy, v(:, 3) + dz] | |
p110 = [v(:, 1) + dx, v(:, 2) + dy, v(:, 3) - dz] | |
p111 = [v(:, 1) + dx, v(:, 2) + dy, v(:, 3) + dz] | |
v000 = interp_cube_trilin (x, y, z, val, p000) | |
v100 = interp_cube_trilin (x, y, z, val, p100) | |
v010 = interp_cube_trilin (x, y, z, val, p010) | |
v001 = interp_cube_trilin (x, y, z, val, p001) | |
v011 = interp_cube_trilin (x, y, z, val, p011) | |
v101 = interp_cube_trilin (x, y, z, val, p101) | |
v110 = interp_cube_trilin (x, y, z, val, p110) | |
v111 = interp_cube_trilin (x, y, z, val, p111) | |
Dx = -v000 .+ v100 .- v010 .- v001 .- v011 .+ v101 .+ v110 .+ v111 | |
Dy = -v000 .- v100 .+ v010 .- v001 .+ v011 .- v101 .+ v110 .+ v111 | |
Dz = -v000 .- v100 .- v010 .+ v001 .+ v011 .+ v101 .- v110 .+ v111 | |
Vxyz = 0.5 .* [Dx./dx, Dy./dy, Dz./dz] | |
sval = size (val) | |
i000 = sub2ind (sval, idx(:, 1), idx(:, 2), idx(:, 3)) | |
i100 = sub2ind (sval, idx(:, 1)+1, idx(:, 2), idx(:, 3)) | |
i010 = sub2ind (sval, idx(:, 1), idx(:, 2)+1, idx(:, 3)) | |
i001 = sub2ind (sval, idx(:, 1), idx(:, 2), idx(:, 3)+1) | |
i101 = sub2ind (sval, idx(:, 1)+1, idx(:, 2), idx(:, 3)+1) | |
i011 = sub2ind (sval, idx(:, 1), idx(:, 2)+1, idx(:, 3)+1) | |
i110 = sub2ind (sval, idx(:, 1)+1, idx(:, 2)+1, idx(:, 3)) | |
i111 = sub2ind (sval, idx(:, 1)+1, idx(:, 2)+1, idx(:, 3)+1 ) | |
Bx = frac(:, 1) | |
By = frac(:, 2) | |
Bz = frac(:, 3) | |
frac = zeros (size (v)) |
elseif | ( | isvector(x)&&isvector(y)&&isvector(z) | ) |
else error | ( | " | x, | |
y | , | |||
z have wrong dimensions" | ||||
) |
frac | ( | : | , | |
3 | ||||
) |
frac | ( | : | , | |
1 | ||||
) |
frac | ( | : | , | |
2 | ||||
) |
idx | ( | : | , | |
3 | ||||
) |
idx | ( | : | , | |
1 | ||||
) |
idx | ( | : | , | |
2 | ||||
) |
endif if | ( | isempty(v) | ) |
endif if | ( | ! | ischarreq | ) |
endif if | ( | size(v, 2)! | = 3 |
) |
Bx = frac(:, 1) |
By = frac(:, 2) |
Bz = frac(:, 3) |
dx = x(2:end) - x(1:end-1) |
dx (end)](idx( dy = y(2:end) - y(1:end-1) |
frac = zeros (size (v)) |
endfunction function[idx, frac] |
case normals8 = cube_idx (x, y, z, v) |
y = squeeze (y(:,1,1))(:) |
z = squeeze (z(1,1,:))(:) |