truncatePolyhedra

Below is a demonstration of the features of the truncatePolyhedra function

Contents

Syntax

[FC,VC,CC]=truncatePolyhedra(F,V,w);

Description

This function computes the truncated form of the input solid as specified by the input faces (F), vertices (V), and the truncation factor (w). The output is the patch data (faces, vertices, and color/face labels) for the truncated solid. The truncation factor ranges between 0 and 1. If unspecified or empty the default value is: w=tan(pi/(size(F,2)*2))/tan(pi/(size(F,2))); which provides the uniform truncation.

Examples

clear; close all; clc;

Truncating a solid

Creating a platonic solid which will be truncated

[V,F]=platonic_solid(1,1); %Get a tetrahedron, the first platonic solid
C=zeros(size(F,1),1); %Create color data for visualization

Truncating a platonic solid

[FC,VC,CC]=truncatePolyhedra(F,V);

Visualizing result

cFigure;
subplot(1,2,1);hold on;
title('Normal solid');
gpatch(F,V,C,'k',1,1);
axisGeom;
camlight headlight;
caxis([0 1]);

subplot(1,2,2);hold on;
title('Truncated solid');
gpatch(F,V,'kw','k',0.25,1);
gpatch(FC,VC,CC,'k',1,1);
axisGeom;
camlight headlight;
caxis([0 1]);

colormap(gjet(2));
drawnow;

Demonstration of truncation for all platonic solids

cFigure;
for q=1:1:5
    [V,F]=platonic_solid(q,1);
    C=zeros(size(F,1),1);
    [FC,VC,CC]=truncatePolyhedra(F,V);

    subplot(3,5,q);hold on;
    gpatch(F,V,C,'k',1,1);
    axisGeom;
    camlight headlight;
    caxis([0 1]);
    axis off;

    subplot(3,5,q+5);hold on;
    gpatch(FC,VC,CC,'k',1,1);
    axisGeom;
    camlight headlight;
    caxis([0 1]);
    axis off;

    [FC,VC,CC]=truncatePolyhedra(F,V,0);

    subplot(3,5,q+10);hold on;
    gpatch(FC,VC,CC,'k',1,1);
    axisGeom;
    camlight headlight;
    caxis([0 1]);
    axis off;

end
colormap(gjet(2));
drawnow;

Truncating a general closed surface

% Creating a triangulated sphere
[F,V]=geoSphere(2,1);
C=zeros(size(F,1),1); %Create color data for visualization

Truncating the solid solid

[FC,VC,CC]=truncatePolyhedra(F,V);

Visualizing result

cFigure;
subplot(1,2,1);hold on;
title('Normal solid');
gpatch(F,V,C,'k',1,1);
axisGeom;
camlight headlight;
caxis([0 1]);

subplot(1,2,2);hold on;
title('Truncated solid');
gpatch(FC,VC,CC,'k',1,1);
axisGeom;
camlight headlight;
caxis([0 1]);

colormap(gjet(2));
drawnow;

Create animated view to study effect of the truncation factor

Prepare visualization

[V,F]=platonic_solid(4,1);
w=tan(pi/(size(F,2)*2))/tan(pi/(size(F,2)));
[FC,VC,CC]=truncatePolyhedra(F,V,w);

hf=cFigure; hold on;
ht=title(['w=',num2str(w)]);
hp=gpatch(FC,VC,CC,'k',1,3);
axisGeom;
colormap(gjet(size(F,1)+size(V,1))); %icolorbar;
camlight headlight;
drawnow;

Create animation window

nSteps=100; %Number of animation steps

%Create the time vector
animStruct.Time=linspace(0,1,nSteps);

%Create w range
w=linspace(1,0,nSteps);

for q=1:1:nSteps
    [~,VC,~]=truncatePolyhedra(F,V,w(q));

    %Set entries in animation structure
    animStruct.Handles{q}=[hp]; %Handles of objects to animate
    for qh=1:1:numel(hp)
        animStruct.Props{q}(qh)={'Vertices'}; %Properties of objects to animate
        animStruct.Set{q}(qh)={VC}; %Property values for to set in order to animate
    end
    animStruct.Handles{q}(end+1)=[ht]; %Handles of objects to animate
    animStruct.Props{q}(end+1)={'String'}; %Properties of objects to animate
    animStruct.Set{q}(end+1)={['w=',num2str(w(q))]}; %Property values for to set in order to animate
end

anim8(hf,animStruct);

GIBBON footer text

License: https://github.com/gibbonCode/GIBBON/blob/master/LICENSE

GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.

Copyright (C) 2019 Kevin Mattheus Moerman

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.