2016-07-28 2 views
1

v라는 Eigen MatrixXd 개체가 있는데이 행렬 내용에 액세스 할 때 몇 가지 문제가 있습니다. 코드에서와 같이 콘솔에서만 내용을 인쇄하면 정상적으로 작동합니다. 나는 콘텐츠를 사용하려고하면 오류가 나타납니다 :Eigen C++ 어설 션 실패

어설 션이 실패했습니다 (행> = 0 & & 행을 < 행() & & COL> = 0 & & COL < 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) 또는 다른 어떤 double을 만들면 마찬가지로 잘 동작합니다. 그리고 오류는 아이겐 (Eigen)에서 뭔가를 가리키고 있습니다. – PamelaTabak

+1

[MCVE]를 제공 할 수 있습니까? –

답변

0

내 잘못입니다. 문제는 내가 프로젝트에서 사용하고 있던 다른 매트릭스 중 하나 였고, 그것을 파악하는 데 다소 시간이 걸렸습니다. 불행히도 Eigen은 실제로 이런 일이 발생하지 않을 때 도움이되지 않습니다.

2 개의 행렬 (A와 B)이 있습니다. 문제가있는 행렬은 A였습니다 (일부 데이터는 행렬에로드되지 않았습니다). 하지만 내가 A와 B를 곱하면, 새로운 결과가 나오는 행렬 C가 생겼다. (내 모든 온전한 체크는 쓸모 없었다.) 나는 아이겐을 많이 안다는 것을 인정한다.

어쨌든, 나 같은 사람이 더 많은 도움이되기를 바랍니다.