Matrix 将(nx1)矩阵乘以(nxm)矩阵系数

Matrix 将(nx1)矩阵乘以(nxm)矩阵系数,matrix,eigen,Matrix,Eigen,我正在尝试使用特征库实现以下Bézier曲线度数高程方程: 下面的代码段正在计算新的控制点。在此代码中,degree是等式中的变量n const size_t dimension = 3; // 2d or 3d points const size_t degree = 3; const size_t order = degree + 1; // Create and fill Eigen::Matrix with original control points Eigen::Matrix&

我正在尝试使用特征库实现以下Bézier曲线度数高程方程:

下面的代码段正在计算新的控制点。在此代码中,
degree
是等式中的变量
n

const size_t dimension = 3; // 2d or 3d points
const size_t degree = 3;
const size_t order = degree + 1;

// Create and fill Eigen::Matrix with original control points
Eigen::Matrix<double, order, dimension> P;

    // Fill matrix with original control points. Should be degree + 1 points.

// Calculate the new control points
Eigen::Matrix<double, degree, 1> M1 = FillElevationMatrix<double, degree>();
Eigen::Matrix<double, degree, 1> M2;
M2.setOnes();
M2 -= M1;
Eigen::Matrix<double, degree, dimension> Q;
for (size_t i = 0; i < degree; ++i) {
    Q.block(i, 0, 1, dimension) = (M1.row(i) * P.row(i)) + (M2.row(i) * P.row(i + 1));
}
const size\u t dimension=3;//二维或三维点
const size\u t degree=3;
常数大小\u t顺序=度+1;
//创建并用原始控制点填充Eigen::Matrix
特征矩阵P;
//用原始控制点填充矩阵。应为学位+1分。
//计算新的控制点
特征::矩阵M1=FillElevationMatrix();
本征矩阵M2;
M2.setOnes();
M2-=M1;
本征矩阵Q;
对于(尺寸i=0;i<度;++i){
Q.块(i,0,1,尺寸)=(M1.行(i)*P.行(i))+(M2.行(i)*P.行(i+1));
}
有没有办法消除循环并一次性进行计算?或者,更一般地说,如何将一列标量(nx1矩阵)乘以nxm矩阵,以便在一次操作中仅将第一个矩阵的对应行乘以第二个矩阵中对应行的每个元素?。循环一次执行一行。我想要的是这样的:


Q=(M1*p.block(0,0,度,维度))+(M2*p.block(1,0,度,维度))

您的循环对应于与对角矩阵相乘,即:

Q = M1.asDiagonal() * P.topRows<degree>() + M2.asDiagonal() * P.bottomRows<degree>();
Q=M1.asDiagonal()*P.topRows()+M2.asDiagonal()*P.bottomRows();

对于初始化
M1
M2
,还可以查看和。

您的循环对应于与对角矩阵相乘,即:

Q = M1.asDiagonal() * P.topRows<degree>() + M2.asDiagonal() * P.bottomRows<degree>();
Q=M1.asDiagonal()*P.topRows()+M2.asDiagonal()*P.bottomRows();

对于初始化
M1
M2
,还可以查看和。

这正是我所希望的,还有更多!我是新来的伊根,所以我很感谢增加的提示。这正是我所希望的,还有更多!我是新来的伊根,所以我感谢增加的提示。