我想在社区中询问我的问题。
我有一系列 double[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] };
现在,在本网站和互联网上搜索我找到了一些示例来执行此操作,但不适用于我的情况。使用 vector 、数组、队列……我什么都不懂。
我把我的代码贴在这里,告诉你帮我解决这个问题。
这是我的代码:
//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);
现在,要获取 double[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);
关于c++ - 如何使用 vector 中包含的 double[4][4] 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760122/