From 7ba91408b58ecd2c2f0c1266b31e722ca71eb0ce Mon Sep 17 00:00:00 2001
From: Jean-Yves TINEVEZ <tinevez@pasteur.fr>
Date: Tue, 30 Jun 2020 15:14:10 +0200
Subject: [PATCH] Change the input of functions.

Now we work more like a class with methods.
---
 RunExample.m      |  8 ++++----
 src/area3d.m      | 18 ++++++++++++++----
 src/perimeter3d.m | 25 +++++++++++++++++--------
 3 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/RunExample.m b/RunExample.m
index d536ed8..d375dc9 100755
--- a/RunExample.m
+++ b/RunExample.m
@@ -146,15 +146,15 @@ for i = 1 : n_objects
     
     o = objects( i );
     
-    area = area3d( o.boundary );
-    perim = perimeter3d( o.boundary );
+    [ area, uncorr_area ] = area3d( o );
+    [ perim, uncorr_perim ] = perimeter3d( o );
     
     objects( i ).area = area;
     objects( i ).perimeter = perim;
     
     uncorr = struct();
-    uncorr.area = polyarea( o.boundary(:,1), o.boundary(:,2) );
-    uncorr.perimeter = perimeter3d( o.boundary( :, 1:2 ) );
+    uncorr.area = uncorr_area;
+    uncorr.perimeter = uncorr_perim;
     objects( i ).uncorr = uncorr;
     
 end
diff --git a/src/area3d.m b/src/area3d.m
index 33d9d2a..c9b4d61 100644
--- a/src/area3d.m
+++ b/src/area3d.m
@@ -1,6 +1,9 @@
-function area = area3d( p )
-%AREA3D Computes the area of a 3D closed polygon.
-%   p must be a Nx3 matrix.
+function [ area, uncorr_area ] = area3d( o )
+%AREA3D Computes the area of the object.
+    
+    %% Deprojected 3D version.
+    
+    p = o.boundary;
 
     n_vertices = size( p, 1 );
 
@@ -25,7 +28,14 @@ function area = area3d( p )
 
     % Total positive area.
     area = sum( area_triangle ) / 2;
-        
+    
+    %% 2D area.
+    
+    uncorr_area = polyarea( o.boundary(:,1), o.boundary(:,2) );
+    
+    
+    %% Subfunction.
+    
     function n = euclidean_norm( v )
         n = sqrt( sum( v .* v, ndims( v ) ) );
     end
diff --git a/src/perimeter3d.m b/src/perimeter3d.m
index ff98ddf..d026425 100644
--- a/src/perimeter3d.m
+++ b/src/perimeter3d.m
@@ -1,14 +1,23 @@
-function perim = perimeter3d( p )
+function [ perim, uncorr_perim ] = perimeter3d( o )
 %PERIMETER3D Perimeter of a closed N-dimensional polygon.
-%   p can be a N x d matrix, with d being the dimensionality.
 
-    p2 = [ p ; p( 1, : ) ];
-    p_diff = diff( p2 );
+    perim = compute_perim( o.boundary );
+    uncorr_perim = compute_perim( o.boundary( : , 1:2 ) );
 
-    p_diff_2 = p_diff .* p_diff;
-    p_diff_2_sum  = sum( p_diff_2, 2 );
-    sls = sqrt( p_diff_2_sum );
-    perim = sum( sls );
+    %% Subfunction
+    
+    function l_perim = compute_perim( p )
+    %   p can be a N x d matrix, with d being the dimensionality.
+
+        p2 = [ p ; p( 1, : ) ];
+        p_diff = diff( p2 );
+
+        p_diff_2 = p_diff .* p_diff;
+        p_diff_2_sum  = sum( p_diff_2, 2 );
+        sls = sqrt( p_diff_2_sum );
+        l_perim = sum( sls );
+
+    end
 
 end
 
-- 
GitLab