c++ - 特征:vector3ds 之间的快速平均角度

标签 c++ geometry eigen angle eigen3

我正在使用 Eigen 库来计算 Vector3ds 的两个 vector 之间的平均角度。必须有比“手动”尝试每个组合更快的方法吗?

double average_angle(const std::vector<Eigen::Vector3d>& v1, const std::vector<Eigen::Vector3d>& v2)
{
    double result = 0;
    for (const auto& v1_entry : v1)
    {
        for (const auto& v2_entry : v2)
        {
            result += acos(v1_entry.dot(v2_entry));
        }
    }
    const auto item_count = v1.size() * v2.size();
    return result / item_count;
}

最佳答案

一个更优雅的版本是:

Matrix3Xd::Map M1(v1[0].data(), 3, v1.size();
Matrix3Xd::Map M2(v2[0].data(), 3, v2.size();
return (M1.transpose() * M2).diagonal().array().acos().mean();

但不要期望它会更快,因为这将归结为相同的代码。

关于c++ - 特征:vector3ds 之间的快速平均角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774298/

相关文章:

c++ - 未在此范围内声明的 Opencv 变量

java - 通过对角线加倍来计算新矩形的角(两个地理点)

c++ - 使用 C++ 中的 Eigen 库定义和填充稀疏矩阵

c++ - 四元数是非常相似旋转的翻转符号吗?

c++ - 这个功能有什么问题?我哪里弄错了?

c++ - vector 中唯一元素的数量

c++ - 修改为具有可配置数量的星星 "*"

html - 如何使用CSS更好地对齐html页面中圆圈内的文本?

algorithm - 重新采样一系列点

c++ - 特征值:t 为 1s 的随机二元 vector