Ich habe ein Eigen MatrixXd-Objekt namens v, und ich habe einige Probleme beim Zugriff auf diese Matrix Inhalt. Wenn ich den Inhalt nur an der Konsole (wie im Code) drucke, funktioniert das genauso gut. Wenn ich versuche, den Inhalt zu verwenden, zeigt der Fehler auf:Eigen C++ Assertion fehlgeschlagen
Assertion fehlgeschlagen: (row> = 0 & & Reihe < Reihen() & & col> = 0 & & col < cols()), Funktion operator(), Datei /usr/local/Cellar/eigen/3.2.4/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h, Linie 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);
}
Und meine ChosenPoint Klasse:
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;
};
Ihr Problem hängt wahrscheinlich mit 'Punkten' zusammen. – user4759923
Wenn ich Punkte [p] .setArray (0.0.0.0) oder irgendein anderes Doppel mache, funktioniert das genauso gut. Und der Fehler deutet auf etwas bei Eigen, nicht wahr? – PamelaTabak
Können Sie ein [MCVE] bereitstellen? –