File Exchange

## polygeom.m

version 1.4.0.0 (54.1 KB) by H.J. Sommer

### H.J. Sommer (view profile)

POLYGEOM computes area, centroid location, area moments of inertia and perimeter of closed polygons.

Updated 09 Dec 2016

POLYGEOM computes area, centroid location, area moments of inertia and perimeter of closed polygons.
This function is useful for bending/torsion stress analyses, area centroids of models for wind tunnel testing, rotational inertia for dynamics and blob analysis for image processing.

Hongbo Zhao

exequiel mas

### exequiel mas (view profile)

Thank you for this code.
I was wondering if the angles of the principal inertia moments could be state in counterclockwise format, starting at positive X axis direction (from 0 to 180º). If you want this, just add the following code below line 91 of polygeom.m:
%
ang1 = ang1+(ang1 < 0)*pi;
ang2 = ang2+(ang2 < 0)*pi;
%

Ryan Baxley

Ajay Goyal

### Ajay Goyal (view profile)

fabricio villacres

### fabricio villacres (view profile)

Function polygeom.
Helpe me please the units are in [m] or [cm].

Jacquelyn Hermosillo

### Jacquelyn Hermosillo (view profile)

Wonderfully well written code! I do have a few general questions though. Why take the mean of the coordinate points? The comment says it improves accuracy, but how exactly? Also, most theoretical area approximations used integrals. How do the summations suffice for these integrals? Just curious.

Nickolas LaSorte

SHAIK ALTHAF V S

Ali Torabi

### Ali Torabi (view profile)

Iqbal Fauzirachman

August Brandberg

sawon pratiher

arun cherian

### arun cherian (view profile)

points have to be in neighbouring/sequential. cannot be in random order. use convhull() if in random order.

Georgios Gkantzounis

Joseph Roberts

Trevor W

lufei

lufei

very good

sue142857

Javier Sarmiento

### Javier Sarmiento (view profile)

Thank you so much! It works very fine. I learned about new commands. I would like to know about the references for the Ixx Iyy formulas. Here is a more simple formula in Steger's paper. I'm not sure why the area(a) is in denominator but despite this value it is the same result.

Here is a the same example

clear; clc;
x = [ 2.000 0.500 4.830 6.330 ]';
y = [ 4.000 6.598 9.098 6.500 ]';

[ x, ns ] = shiftdim( x );
[ y, ns ] = shiftdim( y );
[ n, c ] = size( x );

xime1 = x([n 1:n-1]);
yime1 = y([n 1:n-1]);

a = 1/2*sum(xime1.*y-x.*yime1);
Ixx = 1/12*sum((yime1.^2+yime1.*y+y.^2).*(xime1.*y-x.*yime1));
Iyy = 1/12*sum((xime1.^2+xime1.*x+x.^2).*(xime1.*y-x.*yime1));
if (a<0) a=-a; Ixx=-Ixx; Iyy=-Iyy; end

Nele Gerrits

### Nele Gerrits (view profile)

Does it also work for an arbitrarily shaped form?

charlie

### charlie (view profile)

Excellent program.

Question: Is J = Iuu + Ivv valid only for circular cross sections?

Steve Tweddell

### Steve Tweddell (view profile)

Excellent function, a real time saver

Richard Crozier

Richard Crozier

### Richard Crozier (view profile)

Raghuram, the correct answer is given if you reorder your vertices so they are given clockwise around the outside of the polygon, rather than just specified randomly, e.g,

% x = [1.0000 0.5000 0.8333 0.5694];
% y = [1.0000 0.1667 0.5000 0.5694] ;

% reordered moving clockwise around the polygon from (0.5, 0.1667)

xy = [0.5, 0.1667;
0.8333, 0.5;
1, 1;
0.5694, 0.5694; ];

x = xy(:,1);
y = xy(:,2);

for i = 1:numel(x)-1
line(x(i:i+1), y(i:i+1), [0,0], 'Color', 'b');
hold on
end

line([x(end), x(1)], [y(end), y(1)], [0,0], 'Color', 'b');

[ geom, iner, cpmo ] = polygeom( x, y )

plot(geom(2), geom(3), '+r')

hold off

Raghuram

### Raghuram (view profile)

The outputs are erroneous for the following input:
x = [1.0000 0.5000 0.8333 0.5694]
y = [1.0000 0.1667 0.5000 0.5694]
The centroid is computed as (0.8801,1.1496) which is outside the parallelogram formed by the input points.

Stefan Berger

### Stefan Berger (view profile)

This prog is wonderful, just what I needed. If you have time please improve it to handle the third dimension!!

Xu

Xu

### Xu (view profile)

Alice Huang

Pooya S

Nice package

Jim Price

Yes, yes, yes --- this is an extremely useful and well-done script. Should be a part of the regular Matlab so that users can most easily find it. Thank You!!

Alfonso Rojas

Very useful program, clean and well-commented code. Tried it with Matlab
v 7.0.1 (R14), and it works fine. Excellent.

Chinmay Pangarkar

Super!!! I get all geometry of my arbitrary cells using this code. Thank you H.J. Sommer!!

Thor I. Fossen

Excellent program. Should be standard in Matlab. I have used it compute the centroids for wind and current projected areas as welll as other things:)

Finlay Scott

Very useful for getting the perimeter of cyclic predator-prey ecological systems

Elvis Dieguez

Excellent program! Saved me lots of time trying to calculate the area surveyed by a moving wheeled sensor system.