专有的点积方法:
Eigen, dot product method:
我正在将一些伪代码转换为实际的 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
?
Eigen::Vector3f
有一个 normalized()
方法,它 returns 向量的规范化副本。
所以你可以这样做:
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++。
伪装是:
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
?
Eigen::Vector3f
有一个 normalized()
方法,它 returns 向量的规范化副本。
所以你可以这样做:
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 了解更多信息。