BsplineVolume

相关文件:

  • BsplineVolume.h
  • BsplineVolume.cpp

一个B样条体的方程可表示如下:

BSplineVolume类

#pragma once
#ifndef BSPLINEVOLUME_H
#define BSPLINEVOLUME_H
#include "Volume.h"
#include "FitPoint.hpp"

const double PI = 3.141592653;

class BsplineVolume :public Volume{

public:
    vector<vector<vector<Point3d>>> control_grid;   // 控制网格
    vector<Eigen::VectorXd> knot_vector;            // u,v,w方向的节点向量

    // 用于体拟合迭代时缓存相应基函数的值
    vector<vector<vector<vector<double>>>> matri;   
    vector<int> Bi_start_indexs;
    vector<int> Bj_start_indexs;
    vector<int> Bk_start_indexs;
};
#endif // !BSPLINEVOLUME_H

其中control_grid, knot_vector是B样条体的控制网格和方向的节点向量。

API

以下是BsplineVolume主要的函数,其他函数及具体实现见代码。

#pragma once
#ifndef BSPLINEVOLUME_H
#define BSPLINEVOLUME_H
#include "Volume.h"
#include "FitPoint.hpp"

const double PI = 3.141592653;

class BsplineVolume :public Volume{
public:
    // 获取参数值(u,v,w)对应的点的坐标
    Point3d eval(double u, double v, double w) override;
    // read volume from file
    int readVolume(string) override;
    // save volume to file
    int saveVolume(string) override;

    // 获取参数值为t的等参面,dir为'u'或'v'或'w'
    void get_isoparam_surface(NURBSSurface& surface, double t, char dir);


    // 使用优化方法,生成一个拟合指定点,且雅克比值很好的B样条体
    void fitBsplineSolid(vector<FitPoint3D>& fit_points, int x_points, int y_points, int z_points, double alpha, double delta);

    //体拟合迭代的误差
    double GetSoildFiterror(vector<FitPoint3D>& fit_points,
        int x_points, int y_points, int z_points, double alpha, double delta);


    // lspia 拟合给定的数据点
    void lspia(vector<FitPoint3D>& fit_points, int x_points, int y_points, int z_points, int max_iter_num = 100, double eps = 1e-5);
};
#endif // !BSPLINEVOLUME_H
Copyright © Jiaming Ai 2019 all right reserved,powered by Gitbook本指南发布时间: 2020-03-08 16:26:10

results matching ""

    No results matching ""