Triangle centroid

8 visualizaciones (últimos 30 días)
tomas
tomas el 20 de Mzo. de 2012
Editada: DGM el 16 de Jul. de 2025
Hello, do you somebody know any simlpe method how to find the triangle centroid (or geometric barycenter) in 3D?
Thanks a lot,
Tom
  1 comentario
Zhenren  Yang
Zhenren Yang el 9 de Mayo de 2016
Movida: DGM el 30 de Jun. de 2025
hi, have you get the code that can find the barycenter of 3d (stl,ply)?

Iniciar sesión para comentar.

Respuesta aceptada

Jonathan Sullivan
Jonathan Sullivan el 20 de Mzo. de 2012
Just average all the coordinates. For example, if you have a vector containing x coordinates and a vector containing y coordinates, you can find it in the following manner.
x = rand(3,1); % x-coordinate
y = rand(3,1); % y-coordinate
x_centroid = mean(x);
y_centroid = mean(y);
  1 comentario
tomas
tomas el 20 de Mzo. de 2012
Hmm, that's very simple :-)
Thanks

Iniciar sesión para comentar.

Más respuestas (1)

DGM
DGM el 30 de Jun. de 2025
Editada: DGM el 16 de Jul. de 2025
Another example for emphasis:
unzip stepholecube.stl.zip % for the forum
% so you have some triangles in 3D
T = stlread('stepholecube.stl');
[F V] = t2fv(T); % just for cleanliness
% then get the centroids. you're done
C = mean(permute(reshape(V(F,:),[size(F,1) 3 3]),[1 3 2]),3);
% not sure if that's right?
% well, the barycenter is at [1 1 1]/3 in barycentric coordinates, so ...
idx = (1:size(T,1)).';
Cref = barycentricToCartesian(T,idx,ones(numel(idx),3)/3);
immse(C,Cref) % they're the same.
ans = 3.3543e-34
Now, would this example have worked in 2012? The calculation of the centroid would work fine, though some of the other tools are anachronistic. That said, you don't actually need them to take the mean. If we were living in 2012, the same demo could still be written:
% so you have some triangles in 3D
[F V] = stlread('stepholecube.stl'); % FEX #22409 (NOT the same function!)
% then get the centroids. you're done
C = mean(permute(reshape(V(F,:),[size(F,1) 3 3]),[1 3 2]),3);
% not sure if that's right?
% well, the barycenter is at [1 1 1]/3 in barycentric coordinates, so ...
T = TriRep(F,V);
idx = (1:size(T,1)).';
Cref = baryToCart(T,idx,ones(numel(idx),3)/3);
mean((C(:) - Cref(:)).^2) % they're the same.
ans = 3.3543e-34

Categorías

Más información sobre Polynomials en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by