我目前正在编写一个应用程序,其中我将本征库用于复杂的3D数学。因为我需要不同的点和向量类,所以我的point3d类看起来像这样:
class point3d : public Eigen::Vector4d
{
public:
point3d(){}
point3d(double x, double y, double z) : Eigen::Vector4d(x, y, z, 1) {}
void fromString(std::string input);
};
现在,我想创建此类的成员函数,使我可以解析如下所示的OBJ文件行:
v 2.8 0.52 10.18
至此。这就是我打算设计解析函数的方式
void point3d::fromString(std::string input)
{
char* buf = strdup(input.c_str());
if (strtok(buf, " ") == "v")
{
;
strtok(buf, " ");
this-x = std::stod(strtok(buf, " "));
this->y = std::stod(strtok(buf, " "));
this->z = std::stod(strtok(buf, " "));
}
}
我的问题是Eigen不允许我访问存储在Vector4d中的数据,例如this-> x,this-y,this-> z等。相反,您通常以Vector4d v的形式访问它; v [0],v [1],v [2]等。我认为它的操作方式是使用a
double Eigen::Vector4d::operator[](unsigned int index){...}
功能。
我不知道在派生类中将如何访问这些数据。我需要做什么才能访问该函数中的数据,以便可以写入x,y,z值?
您可以做
(*this)[0]
以此类推,以调用基类operator[]
。
x
,y
,z
不是Eigen::Vector4d
的成员变量,而是方法。您可以使用this->x()
等(或Vector4d::x()
)从派生类访问它们。也可以使用(*this)[0]
或(*this)(0)
。如果您需要在课堂上频繁访问x()
,y()
,z()
,则可以编写一次:
using Vector4d::x;
using Vector4d::y;
using Vector4d::z;
然后仅使用x()
,y()
,z()
访问它们。但是,这可能会导致一些阴影冲突(如果以相同的方式命名局部变量)。