nb=400;     % prŽcision
nbc=20;     % nombre de couleurs
n=nb-1;
a=1;        % axe en x
e=1;        % axe en y
d=1.5;      % axe en z

% sphŽro•de
theta = (0:1:n)/n*pi;
phi = (-n:2:n)'/n*pi/2;
cosphi = cos(phi); cosphi(1) = 0; cosphi(n+1) = 0;
sintheta = sin(theta); sintheta(1) = 0; sintheta(n+1) = 0;

% demi-sph�re
x = a*cosphi*cos(theta);
y = e*cosphi*sintheta;
z = d*sin(phi)*ones(1,n+1);

% reprŽsentation alŽatoire de quatre oeufs
for k=1:4
    phi=rand(1,3); % entre 0 et 1
    rho=rand(1,3); % entre 0 et 1
    f=rand(1,3)*0.65+0.15; % entre 0.15 et 0.8
    b=fix(nbc*rand(1,3))+1; % niveau de couleur
    m=b+fix(nbc*rand(1,3)); 
    c=zeros(nb,nb,3);
    for i=1:nb
        for j=1:nb
            c(i,j,1)=rem(fix(m(1)*(1+0.5*(sin(rho(1)+f(1)*i)+sin(phi(1)+f(1)*j)))),b(1));
            c(i,j,2)=rem(fix(m(2)*(1+0.5*(sin(rho(2)+f(2)*i)+sin(phi(2)+f(2)*j)))),b(2));
            c(i,j,3)=rem(fix(m(3)*(1+0.5*(sin(rho(3)+f(3)*i)+sin(phi(3)+f(3)*j)))),b(3));
        end
    end
    
    c=c./(max(b)-1);
    
    subplot(2,2,k)
    h=surf(x,y,z);
    set(h,'CData',c,'FaceColor','texturemap')
    shading interp
    axis equal
    view(0,0)
    axis off
end
set(gcf,'color','k')