function sphere_delaunay_test02 ( )
%*****************************************************************************80
%
%% SPHERE_DELAUNAY_TEST02 displays the Delaunay triangulation of the data.
%
% Discussion:
%
% Unfortunately, it's not easy to get MATLAB to draw a smooth spherical
% surface, on which to display smooth spherical triangles and smooth
% spherical arcs.
%
% It is easy to get MATLAB to draw the plane polygons formed by the
% points on the surface. However, even for 100 points, the result looks
% bumpy and irregular. This is entirely a graphics issue.
%
% The coloring of the individual triangles is also vexing. By default,
% MATLAB colors the triangles on a blue to red scaled based on something
% like the average of the Z values of the vertices. This means that
% groups of triangles seem to merge, whereas we would like neighboring
% triangles to be easily distinguishable.
%
% I've tried going directly to the PATCH command, which offers control
% over the color of each triangular face, but the specification of a color
% and its application to the patch are cumbersome, and the results I get
% don't correspond with what I think I am asking for, and moreover
% look hideous. So while we can try to visualize the Delaunay triangulation
% on the sphere, what we are seeing, at least with the commands I have
% tried, still requires patience, imagination, and tolerance on the
% part of the viewer.
%
% Licensing:
%
% This code is distributed under the GNU LGPL license.
%
% Modified:
%
% 03 May 2010
%
% Author:
%
% John Burkardt
%
fprintf ( 1, '\n' );
fprintf ( 1, 'SPHERE_DELAUNAY_TEST02\n' );
fprintf ( 1, ' Choose random points on the unit sphere.\n' );
fprintf ( 1, ' Call SPHERE_DELAUNAY to compute the Delaunay triangulation.\n' );
fprintf ( 1, ' Display an image of the Delaunay triangulation.\n' );
%
% Choose a random set of points on the unit sphere.
%
n = 100;
seed = 123456789;
[ xyz, seed ] = uniform_on_sphere01_map ( 3, n, seed );
r8mat_transpose_print ( 3, n, xyz, ' Data points:' );
%
% Compute the Delaunay triangulation.
%
[ face_num, face ] = sphere_delaunay ( n, xyz );
%
% Plot the triangles.
% Allow MATLAB to color the triangles, even though it makes a sorry
% set of choices!
%
figure ( 1 )
clf
trisurf ( face', xyz(1,:), xyz(2,:), xyz(3,:) );
axis equal
xlabel ( '-- X --' );
ylabel ( '-- Y --' );
zlabel ( '-- Z --' );
title ( 'Figure 1: Delaunay triangulation with TRISURF.' )
fprintf ( 1, '\n' );
fprintf ( 1, 'Figure 1: Delaunay triangulation with TRISURF' );
filename = 'test02_plot1.png';
print ( '-dpng', filename )
fprintf ( 1, '\n' );
fprintf ( 'Plot saved as "%s".\n', filename );
%
% Plot the triangles one at a time.
% You can set a single color, or specify it as an RGB value for
% each triangle, but I haven't found a way to make a plot that is
% pleasant to look at.
%
figure ( 2 )
clf
hold on
d = [ 1, 2, 3, 1 ];
for i = 1 : face_num
j = face(d,i);
h(i) = patch ( xyz(1,j), xyz(2,j), xyz(3,j), 'blue', ...
'EdgeColor', 'r', 'LineWidth', 2.0, 'FaceAlpha', 0.7 );
end
axis equal
xlabel ( '-- X --' );
ylabel ( '-- Y --' );
zlabel ( '-- Z --' );
title ( 'Figure 2: Delaunay triangulation using PATCH' );
hold off
filename = 'test02_plot2.png';
print ( '-dpng', filename )
fprintf ( 1, '\n' );
fprintf ( 'Plot saved as "%s".\n', filename );
fprintf ( 1, '\n' );
fprintf ( 1, 'Figure 2: Delaunay triangulation with PATCH.\n' );
return
end