【发布时间】:2020-12-03 17:27:25
【问题描述】:
我需要在 c++ 中的函数中填充一个二维数组(表示矩阵)。
函数如下所示:
double** makeMatrix (const char c, double a) {
double matrix[3][3];
switch (c) {
case 'x' :
matrix = {{1, 0, 0), {0, cos(a), -sin(a)}, {0, sin(a), cos(a)}};
break;
case 'y' :
matrix = {{cos(a), 0, sin(a)}, {0, 1, 0}, {-sin(a), 0, cos(a)}};
break;
case 'z' :
matrix = {{cos(a), -sin(a), 0}, {sin(a), cos(a)}, {0, 0, 1}};
break;
}
return matrix;
}
不用说,这个功能不起作用。
我在这里做错了什么?
由于我应该返回的变量类型与我要返回的变量类型不匹配,我显然有一个问题。
我……迷失在云端。
【问题讨论】:
-
除了重新调整悬空指针 (oops) 的事实之外,不要试图猜测 C++ 语法。一个一个地分配元素。顺便说一句,从数学的角度来看,您的
z案例看起来很有趣。其实还有其他错误吗?看起来你已经滑倒了几个标志。行列式是1吗?你检查一下 - 我太老了。 -
即使您返回一个指向堆栈对象的指针这一事实也表明您确实迷路了。忘记所有这些,找一本好书并使用 std::vector。
-
这是 C 骗子 (stackoverflow.com/q/8886375/2602718)。 C++ 的答案可能是“使用向量”。
-
在我看来,答案是使用线性代数库中的矩阵类:我使用 BLAS,它是 Boost 分布的一部分。
-
这看起来像一个旋转矩阵。如果是这种情况,你将要做矩阵数学,你应该使用线性代数库中的矩阵类来简化你的生活。