本文整理汇总了C++中Distribution::Avg方法的典型用法代码示例。如果您正苦于以下问题:C++ Distribution::Avg方法的具体用法?C++ Distribution::Avg怎么用?C++ Distribution::Avg使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Distribution
的用法示例。
在下文中一共展示了Distribution::Avg方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: applyFilter
//.........这里部分代码省略.........
tri::UpdateFlags<CMeshO>::FaceClearV(m);
Distribution<float> AngleD; // angle distribution
Distribution<float> RatioD; // ratio distribution
tri::UpdateFlags<CMeshO>::FaceClearV(m);
for(CMeshO::FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi)
if(!fi->IsV())
{
fi->SetV();
// Collect the vertices
Point3f qv[4];
bool quadFound=false;
for(int i=0; i<3; ++i)
{
if((*fi).IsF(i) && !(*fi).IsF((i+1)%3) && !(*fi).IsF((i+2)%3) )
{
qv[0] = fi->V0(i)->P(),
qv[1] = fi->FFp(i)->V2( fi->FFi(i) )->P(),
qv[2] = fi->V1(i)->P(),
qv[3] = fi->V2(i)->P();
quadFound=true;
}
}
assert(quadFound);
for(int i=0; i<4; ++i)
AngleD.Add(fabs(90-math::ToDeg(Angle(qv[(i+0)%4] - qv[(i+1)%4], qv[(i+2)%4] - qv[(i+1)%4]))));
float edgeLen[4];
for(int i=0; i<4; ++i)
edgeLen[i]=Distance(qv[(i+0)%4],qv[(i+1)%4]);
std::sort(edgeLen,edgeLen+4);
RatioD.Add(edgeLen[0]/edgeLen[3]);
}
Log("Right Angle Discrepancy Avg %4.3f Min %4.3f Max %4.3f StdDev %4.3f Percentile 0.05 %4.3f percentile 95 %4.3f",
AngleD.Avg(), AngleD.Min(), AngleD.Max(),AngleD.StandardDeviation(),AngleD.Percentile(0.05),AngleD.Percentile(0.95));
Log("Quad Ratio Avg %4.3f Min %4.3f Max %4.3f", RatioD.Avg(), RatioD.Min(), RatioD.Max());
return true;
}
/************************************************************/
if(filterName == "Compute Geometric Measures")
{
CMeshO &m=md.mm()->cm;
tri::Inertia<CMeshO> I(m);
float Area = tri::Stat<CMeshO>::ComputeMeshArea(m);
float Volume = I.Mass();
Log("Mesh Bounding Box Size %f %f %f", m.bbox.DimX(), m.bbox.DimY(), m.bbox.DimZ());
Log("Mesh Bounding Box Diag %f ", m.bbox.Diag());
Log("Mesh Volume is %f", Volume);
Log("Mesh Surface is %f", Area);
Point3f bc=tri::Stat<CMeshO>::ComputeShellBarycenter(m);
Log("Thin shell barycenter %9.6f %9.6f %9.6f",bc[0],bc[1],bc[2]);
if(Volume<=0) Log("Mesh is not 'solid', no information on barycenter and inertia tensor.");
else
{
Log("Center of Mass is %f %f %f", I.CenterOfMass()[0], I.CenterOfMass()[1], I.CenterOfMass()[2]);
Matrix33f IT;
I.InertiaTensor(IT);
Log("Inertia Tensor is :");
Log(" | %9.6f %9.6f %9.6f |",IT[0][0],IT[0][1],IT[0][2]);
Log(" | %9.6f %9.6f %9.6f |",IT[1][0],IT[1][1],IT[1][2]);
Log(" | %9.6f %9.6f %9.6f |",IT[2][0],IT[2][1],IT[2][2]);
Matrix33f PCA;
示例2: applyFilter
//.........这里部分代码省略.........
Matrix44f PCA;
Point4f pcav;
I.InertiaTensorEigen(PCA,pcav);
Log("Principal axes are :");
Log(" | %9.6f %9.6f %9.6f |",PCA[0][0],PCA[0][1],PCA[0][2]);
Log(" | %9.6f %9.6f %9.6f |",PCA[1][0],PCA[1][1],PCA[1][2]);
Log(" | %9.6f %9.6f %9.6f |",PCA[2][0],PCA[2][1],PCA[2][2]);
// Point3f ax0(PCA[0][0],PCA[0][1],PCA[0][2]);
// Point3f ax1(PCA[1][0],PCA[1][1],PCA[1][2]);
// Point3f ax2(PCA[2][0],PCA[2][1],PCA[2][2]);
// Log("ax0*ax1 %f (len ax0 %f) ",ax0*ax1, Norm(ax0));
// Log("ax1*ax2 %f (len ax1 %f) ",ax1*ax2, Norm(ax1));
// Log("ax0*ax2 %f (len ax2 %f) ",ax0*ax2, Norm(ax2));
Log("axis momenta are :");
Log(" | %9.6f %9.6f %9.6f |",pcav[0],pcav[1],pcav[2]);
}
break;
/************************************************************/
case FP_MEASURE_VERTEX_QUALITY_DISTRIBUTION :
case FP_MEASURE_FACE_QUALITY_DISTRIBUTION :
{
CMeshO &m=md.mm()->cm;
Distribution<float> DD;
if(ID(filter)==FP_MEASURE_VERTEX_QUALITY_DISTRIBUTION)
tri::Stat<CMeshO>::ComputePerVertexQualityDistribution(m, DD, false);
else
tri::Stat<CMeshO>::ComputePerFaceQualityDistribution(m, DD, false);
Log(" Min %f Max %f",DD.Min(),DD.Max());
Log(" Avg %f Med %f",DD.Avg(),DD.Percentile(0.5f));
Log(" StdDev %f",DD.StandardDeviation());
Log(" Variance %f",DD.Variance());
}
break;
case FP_MEASURE_GAUSSCURV :
{
CMeshO &m=md.mm()->cm;
SimpleTempData<CMeshO::VertContainer, float> TDArea(m.vert,0.0f);
SimpleTempData<CMeshO::VertContainer, float> TDAngleSum(m.vert,0);
tri::UpdateQuality<CMeshO>::VertexConstant(m,0);
float angle[3];
CMeshO::FaceIterator fi;
for(fi=m.face.begin(); fi!= m.face.end(); ++fi)
{
angle[0] = math::Abs(Angle( (*fi).P(1)-(*fi).P(0),(*fi).P(2)-(*fi).P(0) ));
angle[1] = math::Abs(Angle( (*fi).P(0)-(*fi).P(1),(*fi).P(2)-(*fi).P(1) ));
angle[2] = M_PI-(angle[0]+angle[1]);
float area= DoubleArea(*fi)/6.0f;
for(int i=0;i<3;++i)
{
TDArea[(*fi).V(i)]+=area;
TDAngleSum[(*fi).V(i)]+=angle[i];
}
}
CMeshO::VertexIterator vi;
float totalSum=0;
for(vi=m.vert.begin(); vi!= m.vert.end(); ++vi)
{
(*vi).Q() = (2.0*M_PI-TDAngleSum[vi]);//*TDArea[vi];