Triangle centroid
9 次查看(过去 30 天)
显示 更早的评论
Hello, do you somebody know any simlpe method how to find the triangle centroid (or geometric barycenter) in 3D?
Thanks a lot,
Tom
1 个评论
Zhenren Yang
2016-5-9
移动:DGM
2025-6-30
hi, have you get the code that can find the barycenter of 3d (stl,ply)?
采纳的回答
Jonathan Sullivan
2012-3-20
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 个)
DGM
2025-6-30
编辑:DGM
2025-7-16
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.
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.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Polynomials 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!