79 views (last 30 days)

Show older comments

I use the ISOSURFACE function to generate a patch object:

[x,y,z,v] = flow;

p = patch(isosurface(x,y,z,v,-3));

isonormals(x,y,z,v,p)

set(p,'FaceColor','red','EdgeColor','none');

daspect([1 1 1])

view(3);

camlight

lighting gouraud

I would like to find the area of the patch "p".

MathWorks Support Team
on 29 Aug 2019

Edited: MathWorks Support Team
on 29 Aug 2019

There is no function which directly calculates the surface area of a patch object in MATLAB, however the calculations can be done in a fairly straightforward way using the 'Faces' and 'Vertices' properties of the patch object.

The surface area of the entire patch is then the sum of the areas of all the patch faces. The area of each triangular face can be computed with a cross product. Here is an example:

[x,y,z,v] = flow;

p = patch(isosurface(x,y,z,v,-3));

isonormals(x,y,z,v,p)

set(p,'FaceColor','red','EdgeColor','none');

daspect([1 1 1])

view(3);

camlight

lighting gouraud

verts = get(p, 'Vertices');

faces = get(p, 'Faces');

a = verts(faces(:, 2), :) - verts(faces(:, 1), :);

b = verts(faces(:, 3), :) - verts(faces(:, 1), :);

c = cross(a, b, 2);

area = 1/2 * sum(sqrt(sum(c.^2, 2)));

fprintf('\nThe surface area is %f\n\n', area);

If the patch object is constructed with faces that are not triangular (for example, they are rectangular), then each face can be broken down into triangular pieces (a rectangular face can be thought of as two triangular faces).

Uwe22
on 16 Jun 2017

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!