Code covered by the BSD License  

Highlights from
Make Icosahedron

from Make Icosahedron by Edward Zechmann
This program makes icosahedra of class 1, type 2, and frequency f.

[TRI4, x4, y4, z4]=make_sphere(TRI, x, y, z)
function [TRI4, x4, y4, z4]=make_sphere(TRI, x, y, z)
% % Syntax;
% % 
% % [TRI3, x3, y3, z3]=make_sphere(TRI, x, y, z);
% % 
% % ***********************************************************
% % 
% % Description
% % 
% % Program makes the dome of an even frequency icosahedron 
% % into a full spherical icosahedron.  
% % 
% % ***********************************************************
% % 
% % Input Variables
% % 
% % x, y,and z are row vector of the x, y, and z coordinates of the   
% % icosahedron nodes of the dome. 
% % 
% % TRI is the triangularization of the icosahedron nodes. 
% % 
% % ***********************************************************
% % 
% % Output Variables
% % 
% % x4,y4,and z4 are row vector of the x4, y4, and z4 coordinates of the   
% % full spherical icosahedron nodes. 
% % 
% % TRI4 is the triangularization of the spherical icosahedron nodes. 
% % 
% % ***********************************************************
% % 
% Example
% 
% f=2; % 2 freuqency similar to soccer ball 
% 
% r=4; % 4 meter radius
% 
% [x2, y2, z2, it]=icosahedron_nodes(f, r);
% 
% [x, y, z]=build_icosa(x2, y2, z2);
% 
% [rho, theta, phi]=spherical_angle_ed(x, y, z);
% 
% [x10, y10, z10]=splat(rho, theta, phi);
% 
% TRI = delaunay(x10, y10);
% 
% [TRI, x, y, z]=make_sphere(TRI, x, y, z);
% 
% figure(1);
% h=trisurf(TRI,x,y,z, 'FaceColor', [1 0 0], 'EdgeColor', 0*[1 1 1], ...
% 'LineWidth', 1 );
% title('Red Soccer Ball');
% axis equal
% 
% % ***********************************************************
% % 
% % This program was written by Edward L. Zechmann 
% % 
% % date 7   March   2008  
% % 
% % modified 11   March   2008  added examples and comments
% % 
% % ***********************************************************
% % 
% % Feel free to modify this code.
% % 

nn=length(x);
r=sqrt((x(1, 1).^2+y(1, 1).^2+z(1, 1).^2));

% Calculate the frequency from the length of x
% Assuming that x,y,and z are for a dome.
% length(x)=5*f^2+5/2*f+1;
% using the quadratic equation
f=round(0.25*(sqrt(1/5*(16*length(x)-11))-1));


% For a full sphere the freuqency can be caculated from teh number 
% of nodes by the formulas
% length(x)=10*f^2+2;
% Using the quadratic equation
% f=round(sqrt((length(x)-2)/10));

ix1=find( abs(z) < 0.01*r/(f+1));
ix2=setdiff(1:nn, ix1);

trix2=[];
trix3=[];
m=length(TRI);

for e1=1:m;
    
   tri1=TRI(e1, :);
    
    aa=intersect(tri1,ix1);
    
    if ~isempty(aa)
        trix2=[trix2 e1];
    else
        trix3=[trix3 e1];
    end
    
end


TRI2=TRI(trix2, :);
TRI3=TRI(trix3, :); 
TRI33=zeros(size(TRI3));

for e1=1:length(TRI3);    
    for e2=1:3;
        TRI33(e1, e2)=find(TRI3(e1, e2)==ix2);
    end
end

TRI22=zeros(size(TRI2));

for e1=1:length(TRI2);    
    for e2=1:3;
        
        ix3=find(TRI2(e1, e2)==ix1);
        if ~isempty(ix3)
            TRI22(e1, e2)=ix1(ix3);
        else
            ix4=nn+find(TRI2(e1, e2)==ix2);
            TRI22(e1, e2)=ix4;
        end
        
    end
end

x4=[x x(ix2)];
y4=[y y(ix2)];
z4=[z -z(ix2)];

TRI4=[TRI' [nn+TRI33]' TRI22']';

Contact us at files@mathworks.com