Contents
function drawSoccerBall
%DRAWSOCCERBALL Draw a soccerball using geom3d library % % This demo shows how to use some functions of the geom3d library to % compute and display arcs of a soccer ball. % % In particular, it shows how to: % - create spheres, circles, circle arcs % - create a pre-defined polyhedron % - display 3D shapes % - compute face centroids % - compute intersections of planes, spheres, lines % - draw spherical patches % % Usage: % drawSoccerBall % % % ------ % Author: David Legland % e-mail: david.legland@grignon.inra.fr % Created: 2009-06-22, using Matlab 7.7.0.471 (R2008b) % Copyright 2009 INRA - Cepia Software Platform.
Initialisation
% origin of 3D basis, which also soccerball center origin = [0 0 0]; % the bounding sphere of the soccer ball, used for computing circles sphere = [origin 1]; % extract vertices, edges, and faces of soccerball polyhedron [vertices edges faces] = createSoccerBall; % prepare figure figure(1); clf; hold on; axis equal; % draw the polyhedron as basis drawPolyhedron(vertices, faces);

Draw Faces
% For each face, draw a spherical surface, composed of several triangular % patches, with a specific color for f=1:length(faces) % extract vertices of current face faceVertices = faces{f}; Nvf = length(faceVertices); % compute centroid of face vertices % (See also function faceCentroids) faceCenter = centroid(vertices(faceVertices, :)); % color of the current face (using a typical soccer ball) if Nvf==5 color = 'k'; else color = 'w'; end % compute and display the spherical face associated with each face for i=1:Nvf % current vertices of face edge vertex1 = vertices(faceVertices(i), :); vertex2 = vertices(faceVertices(mod(i, Nvf)+1), :); % draw a portion of the current face drawSphericalTriangle(sphere, faceCenter, vertex1, vertex2, ... 'faceColor', color); end end

Draw edges
% For each edge, draw a circle arc on the sphere for i=1:size(edges, 1) % extremities of current edge point1 = vertices(edges(i, 1), :); point2 = vertices(edges(i, 2), :); % compute plane containing current edge plane = createPlane(origin, point1, point2); % intersection of the plane with unit sphere circle = intersectPlaneSphere(plane, sphere); % find the position (in radians) of the 2 vertices on the circle angle1 = circle3dPosition(point1, circle); angle2 = circle3dPosition(point2, circle); % ensure angles are in right direction if mod(angle2-angle1+2*pi, 2*pi)>pi tmp = angle1; angle1 = angle2; angle2 = tmp; end % compute angle extent of the circle arc angleExtent = mod(angle2-angle1+2*pi, 2*pi); % create circle arc arc = [circle angle1 angleExtent]; % draw the arc drawCircleArc3d(arc, 'linewidth', 2, 'color', 'k'); end
