From 49028dd1232fb758ba3613ef71eccadd4c7681eb Mon Sep 17 00:00:00 2001 From: Jean-Yves TINEVEZ <tinevez@pasteur.fr> Date: Tue, 30 Jun 2020 14:23:59 +0200 Subject: [PATCH] Compute perimeter 3d. --- RunExample.m | 12 +++++++++--- src/perimeter3d.m | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/perimeter3d.m diff --git a/RunExample.m b/RunExample.m index c7407a1..d536ed8 100755 --- a/RunExample.m +++ b/RunExample.m @@ -147,11 +147,14 @@ for i = 1 : n_objects o = objects( i ); area = area3d( o.boundary ); + perim = perimeter3d( o.boundary ); + + objects( i ).area = area; + objects( i ).perimeter = perim; uncorr = struct(); uncorr.area = polyarea( o.boundary(:,1), o.boundary(:,2) ); - - objects( i ).area = area; + uncorr.perimeter = perimeter3d( o.boundary( :, 1:2 ) ); objects( i ).uncorr = uncorr; end @@ -181,7 +184,10 @@ for i = 1 : n_objects o = objects( i ); P = o.boundary; - patch( P(:,1), P(:,2), P(:,3), o.area / o.uncorr.area, ... + + err = o.perimeter / o.uncorr.perimeter - 1; + + patch( P(:,1), P(:,2), P(:,3), err, ... 'LineWidth', 2 ); text( o.center(1), o.center(2), o.center(3) + 0.5, num2str( i ), ... 'HorizontalAlignment', 'center', ... diff --git a/src/perimeter3d.m b/src/perimeter3d.m new file mode 100644 index 0000000..ff98ddf --- /dev/null +++ b/src/perimeter3d.m @@ -0,0 +1,14 @@ +function perim = perimeter3d( p ) +%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 ); + + 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 ); + +end + -- GitLab