2016-07-28 3 views
1

У меня есть объект Eigen MatrixXd, называемый v, и я сталкиваюсь с некоторыми проблемами при попытке получить доступ к этому содержимому матрицы. Когда я печатаю только контент на консоли (как в коде), работает так же хорошо. При попытке использовать содержимое, ошибка появляется:Ошибка Eigen C++

Утверждение не удалось: (строка> = 0 & & строку < строки() & & Col> = 0 & & Col < смещ_по_столбцам()), функция оператор(), файл /usr/local/Cellar/eigen/3.2.4/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h, строка 337.

ChosenPoint ** points = new ChosenPoint*[width]; 
    for (int i = 0; i < width; i++) 
    { 
     points[i] = new ChosenPoint[height]; 
     for (int j = 0; j < height; j++) 
     { 
      points[i][j].setPoint(i, j, false); 
      points[i][j].setNumberOfFrames(numberOfFrames); 
     } 
    } 

Matrix<double, 2, 1> v = (aT * a).inverse() * aT * b; 
if (v.rows() == 2 && v.cols() == 1) 
{ 
    points[x][y].setFlow(v(0,0), v(1,0), frame); 
} 

И мой класс ChosenPoint:

typedef struct point 
{ 
    double x; 
    double y; 
    bool isValid; 
} point; 

class ChosenPoint 
{ 
public: 
ChosenPoint() 
{ 

} 

~ChosenPoint() 
{ 
} 

void setNumberOfFrames(int numberOfFrames) 
{ 
    this->flow = new point[numberOfFrames]; 

    for (int i = 0; i < numberOfFrames; i++) 
    { 
     point f; 
     f.x = 0.0; 
     f.y = 0.0; 
     this->flow[i] = f; 
    } 
} 

void setPoint(int x, int y, bool isValid) 
{ 
    this->pt.x = (double) x; 
    this->pt.y = (double) y; 
    this->pt.isValid = isValid; 
} 

point getPoint() 
{ 
    return this->pt; 
} 

point* getFlow() 
{ 
    return this->flow; 
} 

void setFlow(double &xFlow, double &yFlow, int &position) 
{ 
    this->flow[position].x = xFlow; 
    this->flow[position].y = yFlow; 
} 

void updateFlow(int position) 
{ 
    this->flow[position].x = 2*this->flow[position].x; 
    this->flow[position].y = 2*this->flow[position].y; 
} 

void updateFlow(double xFlow, double yFlow, int position) 
{ 
    this->flow[position].x = xFlow; 
    this->flow[position].y = yFlow; 
} 

point pt; 
point *flow; 

};

+0

Ваша проблема, вероятно, связана с 'points' – user4759923

+0

Если я делаю точки [p] .setArray (0.0.0.0) или любой другой двойной, работает так же хорошо, как и. И ошибка указывает на что-то на Eigen, не так ли? – PamelaTabak

+1

Можете ли вы предоставить [MCVE]? –

ответ

0

Моя вина. Проблема заключалась в одной из других матриц, которые я использовал в проекте, и взял меня на некоторое время, чтобы понять это. К сожалению, Eigen не кажется действительно полезным, когда это происходит:

У меня было 2 матрицы (A и B). Матрица с проблемой была A (так или иначе, некоторые данные не были загружены в матрицу). Но когда я умножил A и B, он сгенерировал новую матрицу C с некоторыми действительными результатами (все мои проверки работоспособности были неактуальны). Я признаю, что не знаю много Эйгена.

В любом случае, надеюсь, что это полезна для большего количества таких людей, как я.

Смежные вопросы