2016-07-28 110 views
1

我有一個Eigen MatrixXd對象,名爲v,我在嘗試訪問此矩陣內容時遇到了一些問題。當我只在控制檯打印內容時(如代碼中所示),工作得很好。當我嘗試使用內容,錯誤顯示出來:Eigen C++斷言失敗

斷言失敗:(行> = 0 & &行<行()& &山坳> = 0 & &山坳<的cols()),函數運算符(),文件/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,並帶有一些有效的結果(我所有的理智檢查都是無用的)。我承認我不知道很多Eigen。

無論如何,希望這對更多像我這樣的人有用。