特征,点积方法:

ant*_*nti 0 c++ eigen

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

伪造的是:

float ac_ab_0 = acos(clamp(dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));
Run Code Online (Sandbox Code Playgroud)

我的代码是:

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);
Run Code Online (Sandbox Code Playgroud)

我正在尝试:

float ac_ab_0 = acos(std::clamp(std::dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));
Run Code Online (Sandbox Code Playgroud)

但我被困住了.应该怎么做: normalize(c - a) 看起来像Eigen::Vector3f?

VB_*_*low 5

Eigen::Vector3f有一个normalized()返回向量的规范化副本的方法.

所以你可以这样做:

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));
Run Code Online (Sandbox Code Playgroud)

您应该查看Eigen快速参考以获取更多信息.

  • 我错过了这一点,显然,`std :: dot`无法正常工作,我用正确的方式编辑了我的答案:`c_minus_a_normalized.dot(b_minus_a_normalized)`.请注意,如果您打开了Eigen快速参考链接并搜索了点...您将在2分钟内找到解决方案; - )... (2认同)