views:

160

answers:

1

I am able to create a 3D cone in MATLAB, but: does anyone know how to paint the cone so that it recreates the HSV color space? I know there is the command:

colormap hsv;

but how do I use it?

Thanks in advance.

+6  A: 

I'm guessing you want to create a plot similar to the cone in the following Wikipedia image:

One way to do this is to plot your cone and texture map the surface with an image of the HSV color space. Here's how you could do this:

%# First, create a 100-by-100 image to texture the cone with:

H = repmat(linspace(0,1,100),100,1);     %# 100-by-100 hues
S = repmat([linspace(0,1,50) ...         %# 100-by-100 saturations
            linspace(1,0,50)].',1,100);  %'
V = repmat([ones(1,50) ...               %# 100-by-100 values
            linspace(1,0,50)].',1,100);  %'
hsvImage = cat(3,H,S,V);                 %# Create an HSV image
C = hsv2rgb(hsvImage);                   %# Convert it to an RGB image

%# Next, create the conical surface coordinates:

theta = linspace(0,2*pi,100);  %# Angular points
X = [zeros(1,100); ...         %# X coordinates
     cos(theta); ...
     zeros(1,100)];
Y = [zeros(1,100); ...         %# Y coordinates
     sin(theta); ...
     zeros(1,100)];
Z = [2.*ones(2,100); ...       %# Z coordinates
     zeros(1,100)];

%# Finally, plot the texture-mapped surface:

surf(X,Y,Z,C,'FaceColor','texturemap','EdgeColor','none');
axis equal

And you should get the following figure:

alt text

gnovice
+1 tested it and works very nice (you might want to add `'EdgeColor','none'` to the SURF options)
Amro
@Amro: Good call on the edge color. I also modified the cone shape to make it a little longer.
gnovice

related questions