Compute isosurface colors.
If called with one output argument and the first input argument
c is a three-dimensional array that contains color values and
the second input argument v keeps the vertices of a geometry
then return a matrix cd with color data information for the
geometry at computed points
[x, y, z] = meshgrid (1:l, 1:m, 1:n)
. The output argument
cd can be taken to manually set FaceVertexCData of a patch.
If called with further input arguments x, y and z
which are three–dimensional arrays of the same size than c
then the color data is taken at those given points. Instead of the
color data c this function can also be called with RGB values
r, g, b. If input argumnets x, y,
z are not given then again meshgrid
computed values
are taken.
Optionally, the patch handle p can be given as the last input argument to all variations of function calls instead of the vertices data v. Finally, if no output argument is given then directly change the colors of a patch that is given by the patch handle p.
For example:
function isofinish (p) set (gca, "PlotBoxAspectRatioMode", "manual", ... "PlotBoxAspectRatio", [1 1 1]); set (p, "FaceColor", "interp"); ## set (p, "FaceLighting", "flat"); ## light ("Position", [1 1 5]); # Available with JHandles endfunction N = 15; # Increase number of vertices in each direction iso = .4; # Change isovalue to .1 to display a sphere lin = linspace (0, 2, N); [x, y, z] = meshgrid (lin, lin, lin); c = abs ((x-.5).^2 + (y-.5).^2 + (z-.5).^2); figure (); # Open another figure window subplot (2,2,1); view (-38, 20); [f, v] = isosurface (x, y, z, c, iso); p = patch ("Faces", f, "Vertices", v, "EdgeColor", "none"); cdat = rand (size (c)); # Compute random patch color data isocolors (x, y, z, cdat, p); # Directly set colors of patch isofinish (p); # Call user function isofinish subplot (2,2,2); view (-38, 20); p = patch ("Faces", f, "Vertices", v, "EdgeColor", "none"); [r, g, b] = meshgrid (lin, 2-lin, 2-lin); cdat = isocolors (x, y, z, c, v); # Compute color data vertices set (p, "FaceVertexCData", cdat); # Set color data manually isofinish (p); subplot (2,2,3); view (-38, 20); p = patch ("Faces", f, "Vertices", v, "EdgeColor", "none"); cdat = isocolors (r, g, b, c, p); # Compute color data patch set (p, "FaceVertexCData", cdat); # Set color data manually isofinish (p); subplot (2,2,4); view (-38, 20); p = patch ("Faces", f, "Vertices", v, "EdgeColor", "none"); r = g = b = repmat ([1:N] / N, [N, 1, N]); # Black to white cdat = isocolors (x, y, z, r, g, b, v); set (p, "FaceVertexCData", cdat); isofinish (p);
See also: isosurface, isonormals.
Package: octave