// 函数功能: // 根据设置的网格信息进行网格初始化 // 输入: // mesh:结构体,包含内容见函数Intput_Initial函数部分 // Col_Points:配点的具体信息,第n行为n阶(LG / R / L各点可能不同) // 输出: // MeshGrid网格信息, 以及对应的网格起点时间、终点时间 // 方法: // 无 // 编写: // 李兆亭,2019 / 12 / 24 // 注: // 凡是变量命名包含1的变量均为归一化变量 #include #include #include #include #include #include "GPM.h" using namespace std; using namespace arma; int Mesh_initial( int colpointsmax, int interval_num, vec Npoints, mat Col_Points, vec interval_points_ratio, mat* MeshGrid, mat* Timestart_Timeend) { // 按照给定间隔比例,间隔interval在phase上分配 // 暂时只考虑单阶段的情况,后面多阶段可以改进 mat a(interval_num, colpointsmax + 3, fill::ones); (*Timestart_Timeend) = -1 * ones(interval_num, 2); // 每一段内的归一化时间后的每一个间隔的开始时间 - 终点时间 (*MeshGrid) = ones(interval_num, colpointsmax + 3); // 网格初始化 //[-1,1]归一化后的每个间隔的起止时间 (*Timestart_Timeend).col(1) = (*Timestart_Timeend).col(1) + cumsum(interval_points_ratio); (*Timestart_Timeend).col(0).rows(1, interval_num - 1) = (*Timestart_Timeend).col(1).rows(0, interval_num - 2); // MeshGrid的第一列记录每一个间隔内的网格点数目 (*MeshGrid).cols(0,0) = Npoints; // MeshGrid的其他列记录配置点的详细信息 int len_row = size(Npoints)(0); int len_col = size(Col_Points)(1); mat Col_Points_block(len_row, len_col, fill::zeros); for (int i = 0; i < len_row; i++) { Col_Points_block.row(i) = Col_Points.row(Npoints(i) - 1); } (*MeshGrid).cols(1, colpointsmax + 1) = Col_Points_block.cols(0, colpointsmax); return 1; }