本征,点积法:

时间:2018-09-26 14:07:01

标签: 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));

但是被卡住了。这行应该是什么: normalize(c - a)Eigen::Vector3f一样?

1 个答案:

答案 0 :(得分: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));

您应检查Eigen quick reference以获得更多信息。