如何使用向量中包含的double[4][4]数组
How use arrays of double[4][4] contained in a vector?
我想向社区询问我的问题。
我有一系列双[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();
}
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 是否可以输入到const double数组
- 错误:数组大小表达式必须具有整型或无作用域枚举类型,而不是'double'
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- C++ 错误错误:数组下标的类型"双精度 [10][10][double]"无效
- 如何使用向量中包含的double[4][4]数组
- 错误:数组下标'double*[double]'的类型无效
- PTXAS 在结构数组上使用 thrust::sort 时"double is not supported"警告
- 使用double-for循环索引一维数组
- 当我从int切换到double时,数组中出现了奇怪的反馈
- 使用float 2d数组的C++内存泄漏,如果我使用double,则会消失
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 如何在 C# 中从 com 对象返回数组(double[])
- 将表示二维数组的 std::vector<std::vector <double> >转换为 cv::Mat
- 实现动态数组数据结构时出现"double free or corruption"错误
- 将二维数组 double[][] 传递给 c# 窗口应用程序
- 声明 double* 数组时出现损坏的堆错误
- 在QT中,是否有一个用于double、float、int等的动态数组.即QDoubleArray
- 数组类 - 错误:无法将参数从 'double' 转换为 'int'