Code covered by the BSD License

### Highlights from subtri(F,V,n,uniqueOpt)

4.5
4.5 | 3 ratings Rate this file 3 Downloads (last 30 days) File Size: 7.25 KB File ID: #28277 Version: 1.3

# subtri(F,V,n,uniqueOpt)

### Kevin Moerman (view profile)

23 Jul 2010 (Updated )

Sub-triangulates patch format data. Can be used to increase the density of triangulated data

File Information
Description

[Fs,Vs]=subtri(F,V,n,uniqueOpt);
Sub-triangulates the triangles defined by the patch format data F (faces) and V (vertices). Can be used to increase the density of triangulated data.

Sub-triangulates the triangles defined by the patch format data F (faces) and V (vertices). Creates n addition points on the edges of the initial triangles, thus it creates (n+1).^2 triangles per original triangle. Two methods are implemented one which iteratively splits edges and can thus only be used if log2(n+1) is a positive integer. This method guarantees that all points are unique. If log2(n+1) is not a positive integer points are seeded on all edges initially creating non-unique points. However if uniqueOpt is 1 (default if not provided) these points are suppressed using the unique command (based on rounding of coordinates to 5th decimal place after edge length based scaling).

%% EXAMPLE
[X,Y] = meshgrid(linspace(-10,10,15));
Z = sinc(sqrt((X/pi).^2+(Y/pi).^2));
F = delaunay(X,Y); V=[X(:) Y(:) Z(:)]; C=mean(Z(F),2);

n=2;
[Fs,Vs]=subtri(F,V,n);
Vs(:,3)=sinc(sqrt((Vs(:,1)/pi).^2+(Vs(:,2)/pi).^2)); Z=Vs(:,3);Cs=mean(Z(Fs),2);

figure('units','normalized','Position',[0 0 1 1],'Color','w'); colordef('white');
subplot(1,2,1);patch('Faces',F,'Vertices',V,'FaceColor','flat','CData',C,'FaceAlpha',0.5,'EdgeColor','k','LineWidth',2); hold on;
axis tight; axis square; grid on; hold on; view(3); axis off;
title('Original','FontSize',20);
subplot(1,2,2);patch('Faces',Fs,'Vertices',Vs,'FaceColor','flat','CData',Cs,'FaceAlpha',0.5,'EdgeColor','k','LineWidth',0.5); hold on;
axis tight; axis square; grid on; hold on; view(3); axis off;
title(['n=',num2str(n)],'FontSize',20);

MATLAB release MATLAB 8.5 (R2015a)
MATLAB Search Path
/
22 May 2014 Lomas

### Lomas (view profile)

22 May 2014 Lomas

28 Sep 2010 M P

### M P (view profile)

29 Jul 2010 Kevin Moerman

### Kevin Moerman (view profile)

Updated 28/07/2010

Comment only
28 Jul 2010 Kevin Moerman

### Kevin Moerman (view profile)

Will be updated shortly. Currently requires missing function and filtering of double points using "unique" is not reliable.

Comment only
28 Jul 2010 1.1

Fixed instability due to "unique" function. Removed dependency on linspacen function which I did not upload.

30 Sep 2010 1.2

Fixed normal direction and reference to missing function

28 Apr 2015 1.3

Updated with splitting method (faster)