c++ - 如何使用 vector 中包含的 double[4][4] 数组?

标签 c++ arrays visual-c++

我想在社区中询问我的问题。

我有一系列 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/

相关文章:

c++ - 如何计算 std::basic_string<TCHAR>

c++ - 我们可以使用用户定义的类作为 STL 映射中的键吗?

c++ - 如何找到 int[] 的大小?

c++ - Qt 翻译 : What context should I use in the ts file for standard buttons like OK, 保存,取消?

ruby-on-rails - 将 Json 数据解析为简单数组 Ruby on Rails 4

javascript - .双数组中的过滤器

c++ - 无法使用 std::sort 和自定义比较器对我的数组进行排序

java - 尝试从空数组中读取

c++ - 如何更好地实现这个自 Action 用域模板对象?

visual-studio-2008 - 使用 Visual Studio 2010,如何链接到 Visual Studio 2008 生成的 DLL