我在一个我无法完全理解的论坛上找到了这段 C++ 代码。由于我没有执行矩阵/向量数学的库,因此我需要手动计算并复制功能。
计算2个向量之间的欧拉旋转角..我们使用罗德里格斯公式
vector $V1 = << my first vector >>;
vector $V2 = << my second vector >>;
vector $axis;
float $angle;
$angle = acos($V1*$V2);
$axis = normalizeVector((cross($V1,$V2)));
matrix $axis_skewed[3][3] = <<
0, (-$axis.z), ($axis.y) ;
($axis.z), 0, (-$axis.x) ;
(-$axis.y), ($axis.x), 0 >>;
matrix $eye3[3][3] = <<
1, 0, 0;
0, 1, 0;
0, 0, 1 >>;
从这里开始,事情变得棘手:
// here's Rodrigues
$R = $eye3 + sin($angle)*$axis_skewed + (1-cos($angle))*$axis_skewed*$axis_skewed;
你添加 eye3 矩阵的所有属性了吗?
你乘以axis_skewed矩阵的所有属性吗?
什么是 R?向量还是矩阵?或号码?
这很简单。
matrix $vectorMatr[3][1];
$vectorMatr[0][0] = ($V1.x);
$vectorMatr[1][0] = ($V1.y);
$vectorMatr[2][0] = ($V1.z);
同样,这很棘手:
// $result is the resulting vector
$result = ($R * $vectorMatr);
您是否将向量与矩阵相乘以使用标准矩阵乘法得到结果向量?
您是否将两个矩阵相乘,然后使用矩阵变换点?