我在对矢量进行排序后,通过重新定义双向量来解决问题。在程序中,我得到一些给定.stl文件的坐标(xyz)。为了重建这个模型,我将这个坐标存储在一个向量中。所以首先我创建矢量矩阵:
public function get_image()
{
$reg = $this->session->userdata['user'][0]['REG#'];
/*$this->db->select("PIC");
$query = $this->db->get_where("ADM_STUDENT",array("REG#" => "BET-FA07-012"));*/
$query = $this->db->query("select * from ADM_STUDENT WHERE REG# = 'BEE-FA15-066'");
$row = $query->row_array();
echo "<pre>";
print_r($row);
//$this->output->set_header('content-type: image/jpeg');
//print $row['PIC'];
//echo '<img src="data:image/jpeg;base64,'.base64_encode( $row['PIC'] ).'"/>';
}
然后我用数据填充它并对数据进行排序:
vector<vector<double> > matrix;
int rows = ((2*lss.size()));//numbers of rows the vector need; lss is a vecotr and stores the coordinates; lss can not be used
int column = 3 //x-,y-,z-coordinates
matrix.resize(rows);
for(size_t i=0; i<rows; i++) {
matrix[i].resize(column);
}
要关闭模型的轮廓,下一步将增加向量,以便可以保存一个点并将第一个点复制到向量的末尾。 所以我尝试了这段代码:
int j=0;
for(size_t i = 0;i<lss.size();i++) {
int k = j+1;
matrix[j][0]=lss[i].v[0].x;
matrix[j][1]=lss[i].v[0].y;
matrix[j][2]=lss[i].v[0].z;
matrix[k][0]=lss[i].v[1].x;
matrix[k][1]=lss[i].v[1].y;
matrix[k][2]=lss[i].v[1].z;
j=j+2;
}
std::sort(matrix_zeile.begin(), matrix_zeile.end(), compare2);
要将数据打印到文件,我使用此代码
int rows_new = ((2*lss.size())+2);
matrix.resize(rows_new);
for(size_t i=0; i<rows_new; i++) {
matrix[i].resize(columns);
}
int p = 2*lss.size();
int q = (2*lss.size())+1;
matrix[p][0]=matrix[0][0];
matrix[p][1]=matrix[0][1];
matrix[p][2]=matrix[0][2];
matrix[q][0]=matrix[0][0];
matrix[q][1]=matrix[0][1];
matrix[q][2]=matrix[0][2];
我的问题似乎是,resize函数在向量的beginnign处添加新的存储空间而不是在最后,因为我需要它。因此,当我打印坐标时,第一个指向的点始终为零。
我现在的问题是:是否有可能调整向量的大小并在向量矩阵的末尾添加新的storeg空间?