Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Solution 333912

Submitted on 15 Oct 2013 by Tim

Correct

191Size
This is the leading solution.
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

Test Suite

Test
Code Input and Output
1
Pass
 
assignin('caller','score',1000);
Score=[];
tic;
for minvertices=100:100:1000,
    fvc=sphere_patch(minvertices);
    fvc=reducepatch(fvc,1);
    assert(size(fvc.vertices,1)>=minvertices,'too few vertices');
    assert(size(fvc.faces,1)>=minvertices,'too few faces');
    assert(all(abs(1-sum(fvc.vertices.^2,2))<1e-4),'vertices not on the sphere surface');
    assert(isequal(unique(fvc.faces),(1:size(fvc.vertices,1))'),'all vertices must be referenced in faces');
    d1=sqrt(sum(abs(fvc.vertices(fvc.faces(:,1),:)-fvc.vertices(fvc.faces(:,2),:)).^2,2));
    d2=sqrt(sum(abs(fvc.vertices(fvc.faces(:,2),:)-fvc.vertices(fvc.faces(:,3),:)).^2,2));
    d3=sqrt(sum(abs(fvc.vertices(fvc.faces(:,3),:)-fvc.vertices(fvc.faces(:,1),:)).^2,2));
    s=(d1+d2+d3)/2;
    a=sqrt(s.*(s-d1).*(s-d2).*(s-d3));
     assert(abs(1-sum(a)/4/pi)<.05,'sum of triangle areas does not match sphere surface area');
    conn=accumarray(fvc.faces(:,[1,2]),1,size(fvc.vertices,1)*[1 1])+accumarray(fvc.faces(:,[1,3]),1,size(fvc.vertices,1)*[1 1])+accumarray(fvc.faces(:,[2,3]),1,size(fvc.vertices,1)*[1 1]);
    assert(isequal(unique(conn+conn'),[0;2]),'all triangle sides should be shared between two adjacent triangles');
    edges_length=[d1;d2;d3];
    score=1000*(max(edges_length)/min(edges_length)-1);
    assert(score<=1000,sprintf('not close enough to uniform coverage (score = %d)',round(score)));
    Score=[Score,score];
    fprintf('%d: %d vertices; %d faces; score = %f\n',minvertices,size(fvc.vertices,1),size(fvc.faces,1),score);
end
toc;
assignin('caller','score',round(mean(Score)));
100: 162 vertices; 320 faces; score = 177.652828
200: 642 vertices; 1280 faces; score = 190.652166
300: 642 vertices; 1280 faces; score = 190.652166
400: 642 vertices; 1280 faces; score = 190.652166
500: 642 vertices; 1280 faces; score = 190.652166
600: 642 vertices; 1280 faces; score = 190.652166
700: 2562 vertices; 5120 faces; score = 193.992426
800: 2562 vertices; 5120 faces; score = 193.992426
900: 2562 vertices; 5120 faces; score = 193.992426
1000: 2562 vertices; 5120 faces; score = 193.992426
Elapsed time is 6.034632 seconds.