如何使用向量中包含的double[4][4]数组

How use arrays of double[4][4] contained in a vector?

本文关键字:数组 double 何使用 向量 包含      更新时间:2023-10-16

我想向社区询问我的问题。

我有一系列双[4][4]的数组,格式如下:

double T1[4][4] = {
{-0.9827,   -0.1811,   -0.0388,    0.1234},
{0.0807,   -0.2303,   -0.9698,    0.1755},
{0.1666,   -0.9561,    0.2409,    0.6729},
{0,         0,         0,    1.00000    }};
double T2[4][4] = {
{-0.8524,   -0.5029,   -0.1432,    0.1963},
{0.1580,    0.0135,   -0.9874,    0.1285},
{0.4984,   -0.8643,    0.0680,    0.6237}, 
{0,         0,         0,    1.00000 }};

T3、T4等等…

我需要将所有这些数组插入一个容器中,以便一次从另一个函数中提取一个数组,该函数需要该格式的数组,因为进行这些详细说明:

int verifica_punti(punto P, Mat& I, double TC[4][4], const double fc[2],const double KC[5], const double cc[2],const double alpha){
//punto
double P1[4] = {P.x, P.y, P.z, 1.0};
//iniz
double Pc[3] = {TC[0][3], TC[1][3], TC[2][3]};
//calc
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
Pc[i] += TC[i][j] * P1[j];
}
}
//norm
double PN[2] = { Pc[0]/Pc[2], Pc[1]/Pc[2] };

现在,在这个网站和互联网上搜索,我找到了一些这样做的例子,但在我的情况下不起作用。使用向量、数组、队列。。。我什么都不懂。

我把我的代码粘贴在这里,并告诉你帮我解决这个问题。

这是我的代码:

//array of TC
typedef array<array<double,4>,4> Matrix;
//single TC
Matrix T1 = {{
{{-1.0000,   0.0000,  -0.0000,   0.1531}},
{{0.0000,   0.0000,  -1.0000,   0.1502 }},
{{-0.0000,  -1.0000,  -0.0000,   1.0790}},
{{0 ,       0,        0,   1.0000     }}}}; 
Matrix T2 = {{  
{{-1.0000,    0.0009,    0.0019,    0.1500}},
{{-0.0021,   -0.4464,   -0.8948,    0.1845}},
{{0.0000,   -0.8948,    0.4464,    0.8094 }},
{{ 0,         0,         0,    1.0000    }}}}; 

等等。。。。然后,申报容器并填充:

vector <Matrix> TCS;
TCS.push_back(T1);
TCS.push_back(T2);
TCS.push_back(T3);
TCS.push_back(T4);
TCS.push_back(T5);
TCS.push_back(T6);
TCS.push_back(T7);
TCS.push_back(T8);
TCS.push_back(T9);

现在,对于获得双[4][4]格式的单个矩阵,在函数"verifica_punti"(之前写过)处传递它,我该怎么办?

我一次需要一个TC,但按照FIFO顺序(我推送的第一个,我需要弹出并使用。

我该怎么做?因为我写过

double  temp[4][4] = TCS.pop_back()

double temp[4][4] = TCS[i];

但不正确。

我使用的是windows 7 64位上的Visual C++2010。

请帮帮我:-(提前谢谢。

typedef array<array<double,4>,4> Matrix;
vector <Matrix> TCS;

你有

//double temp[4][4] = TCS[i]; // Illegal
Matrix m1 = TCS[i]; // legal
const Matrix& m2 = TCS[i]; // legal, and avoid a copy.

现在,你必须改变:

int verifica_punti(punto P, Mat& I, double TC[][4], const double fc[], const double KC[], const double cc[], const double alpha);

int verifica_punti(punto P, Mat& I, Matrix& TC, const double fc[], const double KC[], const double cc[], const double alpha);

std::array< std::array<double,4>, 4>double[4][4]是不同的类型。前者封装了后者,使其具有可复制性,可以在容器中使用,并且具有实际相同的接口。但它们不能互换使用。

你已经有了typedef,所以使用它:

while (!TCS.empty()) {
// get the last one
Matrix m = TCS.back();
/* do stuff with m */
// pop the last one out
TCS.pop_back();
}