本征:vector3ds之间的快速平均角度

时间:2018-08-09 19:14:11

标签: c++ geometry eigen angle eigen3

我正在使用本征库来计算Vector3ds的两个向量之间的平均角度。是否有比“手工”尝试每种组合更快的方法?

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;
}

1 个答案:

答案 0 :(得分:1)

一个更优雅的版本是:

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();

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