1.类Arc, 包含了两个节点的信息,存储了他们的ID
lass Arc : virtual public Debug { int downNodeId_, upNodeId_; };
//
2. SuperArc, 存储了节点列表,重心列表和sample列表
bool pruned_;
std::vector<int> regularNodeList_; // 一维数组
std::vector<std::vector<double> > barycenterList_; // 点数组 ,实际是 double[3] 的数组
std::vector<std::vector<int> > sampleList_; //
//
3.类Node,存储了上升,下降arc, Superarc列表
class Node : virtual public Debug
{ ....................
int vertexId_;
bool pruned_;
double layoutX_, layoutY_;
std::vector<int> downArcList_, upArcList_; //上arc, 下arc列表,存储的是ID
std::vector<int> downSuperArcList_, upSuperArcList_; // 上superArc, 下superArc列表,同样存储的是ID
}
//
4. class ContourTreeSimplificationMetric : virtual public Debug {
virtual double computeSuperArcMetric(const int &downVertexId, const int &upVertexId, const std::vector<int> &interiorNodeIds) = 0;
protected: SubLevelSetTree *tree_; };
5. class PersistenceMetric: public ContourTreeSimplificationMetric {
public: double computeSuperArcMetric(const int &downVertexId, const int &upVertexId, const std::vector<int> &interiorNodeIds); };
///
6.class SubLevelSetTree
int vertexNumber_; // 点数 bool maintainRegularVertices_; double minScalar_, maxScalar_; // 最大,最小值 (本子树) const std::vector<real> *vertexScalars_; // 节点标量值数据 std::vector<int> *vertexSoSoffsets_; // ???? Triangulation *triangulation_; //三角面片 std::vector<int> *minimumList_, *maximumList_; //极大值 和 极小值 序列 std::vector<Node> nodeList_, originalNodeList_; // 节点 和 起始节点列表 std::vector<Arc> arcList_; // arc表 std::vector<SuperArc> superArcList_, originalSuperArcList_; //超级arc表 std::vector<int> vertex2node_, // vertex和node关系?,vertex->超级arc, 超级arc结点 vertex2superArc_,vertex2superArcNode_; std::vector<std::vector<double> > *vertexPositions_; //节点坐标 bool isSkeletonComputed_;
//
7. class ContourTree : public SubLevelSetTree{
成员:
SubLevelSetTree mergeTree_, splitTree_;
方法:
int getPersistencePairs(std::vector<std::pair<std::pair<int,int>,double>>* pairs, std::vector<std::pair<std::pair<int,int>,double>>* mergePairs=nullptr, std::vector<std::pair<std::pair<int,int>,double>>* splitPairs=nullptr) const; //得到点对及其持续值
int getPersistencePlot(std::vector<std::pair<double,int>> &plot, std::vector<std::pair<std::pair<int,int>,double>>* mergePairs=nullptr, std::vector<std::pair<std::pair<int,int>,double>>* splitPairs=nullptr, std::vector<std::pair<std::pair<int,int>,double>>* pairs=nullptr) const; //得到不同类型pair的持续值
int getPersistenceDiagram(std::vector<std::pair<double, double> > &diagram, // 得到持续图 std::vector<std::pair<std::pair<int,int>,double>>* mergePairs=nullptr, //点对及持续值 std::vector<std::pair<std::pair<int,int>,double>> splitPairs=nullptr, std::vector<std::pair<std::pair<int,int>,double>>* pairs=nullptr)
int simplify(const double &simplificationThreshold, ContourTreeSimplificationMetric *metric=NULL);
其余方法省略!!!