c++ - Eigen ,点积法 :

标签 c++ eigen

我正在将一些伪代码转换为实际的 C++。

伪装是:

float ac_ab_0 = acos(clamp(dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));

我的代码是:

Eigen::Vector3f a = Eigen::Vector3f(0, 0, 0);
Eigen::Vector3f b = Eigen::Vector3f(0, -5.579, -6.747);
Eigen::Vector3f c = Eigen::Vector3f(0, -13.637, -9.751);

我正在尝试:

float ac_ab_0 = acos(std::clamp(std::dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));

但是卡住了。这一行应该是什么: 归一化(c - a) 看起来像 Eigen::Vector3f?

最佳答案

Eigen::Vector3f 有一个 normalized() 方法,它返回 vector 的规范化拷贝。

所以你可以这样做:

Eigen::Vector3f c_minus_a_normalized = (c - a).normalized();
Eigen::Vector3f b_minus_a_normalized = (b - a).normalized();

float ac_ab_0 = acos(std::clamp(c_minus_a_normalized.dot(b_minus_a_normalized), -1.f, 1.f));

你应该检查Eigen quick reference了解更多信息。

关于c++ - Eigen ,点积法 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52519690/

相关文章:

c++ - 如何在 Makefile 中定义 C++ 预处理器变量

c++ - 错误地将自动类型说明符用于 Eigen 对象

c++ - 用模板替换标量失败

c++ - 表达式必须具有常量值特征矩阵

c++ - 如何从 EigenBase 构建动态数组?

optimization - Eigen :就位系数乘法

c++ - 已定义/多个对象定义/Visual Studio

c++ - 声明一个 double 给它一个值 0 但打印结果意外改变

c++ - 将静态库封装在动态链接库 (DLL) 中

c++ - OpenGL 在应该围绕本地原点时围绕世界原点旋转