added a function for calculating the barycenter of a pointcloud mesh (with uniform weight, or using vertex quality as vertex weight).
This commit is contained in:
parent
1f22183b90
commit
d32b8eb287
|
@ -114,6 +114,34 @@ public:
|
|||
return minmax;
|
||||
}
|
||||
|
||||
/**
|
||||
\short compute the pointcloud barycenter.
|
||||
E.g. it assume each vertex has a mass. If useQualityAsWeight is true, vertex quality is the mass of the vertices
|
||||
*/
|
||||
static Point3<ScalarType> ComputeCloudBarycenter(MeshType & m, bool useQualityAsWeight=false)
|
||||
{
|
||||
if (useQualityAsWeight)
|
||||
tri::RequirePerVertexQuality(m);
|
||||
|
||||
Point3<ScalarType> barycenter(0, 0, 0);
|
||||
Point3d accumulator(0.0, 0.0, 0.0);
|
||||
double weightSum = 0;
|
||||
VertexIterator vi;
|
||||
for (vi = m.vert.begin(); vi != m.vert.end(); ++vi)
|
||||
if (!(*vi).IsD())
|
||||
{
|
||||
ScalarType weight = useQualityAsWeight ? (*vi).Q() : 1.0;
|
||||
accumulator[0] += (double)((*vi).P()[0] * weight);
|
||||
accumulator[1] += (double)((*vi).P()[1] * weight);
|
||||
accumulator[2] += (double)((*vi).P()[2] * weight);
|
||||
weightSum += weight;
|
||||
}
|
||||
barycenter[0] = (ScalarType)(accumulator[0] / weightSum);
|
||||
barycenter[1] = (ScalarType)(accumulator[1] / weightSum);
|
||||
barycenter[2] = (ScalarType)(accumulator[2] / weightSum);
|
||||
return barycenter;
|
||||
}
|
||||
|
||||
/**
|
||||
\short compute the barycenter of the surface thin-shell.
|
||||
E.g. it assume a 'empty' model where all the mass is located on the surface and compute the barycenter of that thinshell.
|
||||
|
|
Loading…
Reference in New Issue