c++ - 如何将向量分配给特征中的矩阵
问题描述
我想将向量分配给动态大小的矩阵。如以下代码所示:
Eigen::Vector3f VectorCam; // Vector in camera frame
Eigen::MatrixXf VectorsCam; // Matrix contains the vectors
for (int i=0; i<=theta1.size(); i++)
{
std::cout << "I'm In theta1.size for loop" << std::endl;
VectorCam << sin(theta1[i]), sin(theta2[i]), cos(theta1[i])*cos(theta2[i]);
std::cout << "theta1.size is:" << theta1.size() << std::endl;
std::cout << VectorCam << std::endl;
VectorsCam.col(i) = VectorCam; // Matrix of Camera Vectors
std::cout << "Vectorscam" << VectorsCam << std::endl;
}
在终端我得到这个(下面 #### )!知道 for 循环仍在第一次运行中,它应该在退出之前运行至少 2 次!我认为问题出在 VectorsCam.col(i)
######## 我在 theta1.size for loop theta1.size is:1 1 1 7.82347e-10 visual_servo_node: /usr/include/eigen3/Eigen/src/Core/Block.h:123: Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>::Block(XprType&, Eigen::Index) [with XprType = Eigen::Matrix<float, -1, -1>; int BlockRows = -1; int BlockCols = 1; 布尔内面板=真;Eigen::Index = long int]: 断言 `(i>=0) && ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i<xpr.rows()) ||((BlockRows ==XprType::RowsAtCompileTime) && (BlockCols==1) && i<xpr.cols()))' 失败。中止(核心转储)
解决方案
在打电话之前,VectorsCam.col(i)
您必须确保VectorsCam
至少有i+1
列。并且在分配VectorsCam.col(i) = VectorCam;
行数时VectorsCam
必须与VectorCam
.
循环前写
Eigen::MatrixXf VectorsCam(3, theta1.size()); // Matrix contains the vectors
(我认为循环本来就是for (int i=0; i<theta1.size(); i++)
)
推荐阅读
- python - PyTorch 中自动编码器的输出显示图像上的网格
- triggers - Pine 脚本 - Tradingview - 需要延迟触发序列以使其不在同一个柱上发生才能执行
- javascript - 将数据从一个选项卡发送到另一个跨域
- flutter - Why are Dart null-safety problems showing up inconsistently in 2 places
- java - 正则表达式检查重复字符
- tpm - TPM,开放连接。请求的 PKCS #11 对象不可用
- java - 将对象中的值更改为蛇形
- r - 将分类列转换为数值
- reactjs - 在 useEffect 之外定义函数和在其中调用该函数以及在 useEffect 中定义函数有什么区别?
- flutter - 如何从作为地图传入的多个 TextController 中检索文本