查找 3D 点的两个交集的最佳方法::矢量

The best way to find intersection two std::vectors of 3D points

本文关键字:最佳 方法 两个 矢量 3D 查找      更新时间:2023-10-16

我想知道是否有办法使用标准库找到两个 3D 点向量的交集.3D点是带有 x、y 和 z 的 glm::vec3。x、y 和 z 是浮点数。

我知道我们可以在 1D 数组上使用 std::set_intersection。

为了清楚起见,我有 2 个向量:

std::vector<Point> v1;
std::vector<Point> v2;

其中点是:

struct Point {
    glm::vec3 m_position;
    glm::vec2 m_texCoord;
    glm::vec3 m_normal;
    Point() {}
    Point(glm::vec3& pos, glm::vec2& tex, glm::vec3& norm) {
        m_position = pos;
        m_normal = norm;
        m_texCoord = tex;
    }
    Point(glm::vec3& pos, glm::vec3& norm) {
        m_position = pos;
        m_normal = norm;
    }
    Point(glm::vec3& pos) {
        m_position = pos;
    }
};

我想通过Point.m_position找到 v1 和 v2 的交集。

谢谢你的帮助。

std::set_intersection()的文档中提到

1(使用运算符比较元素<并且必须相对于相同范围进行排序。>

所以基本上你需要为Point提供一个重载的operator<(),并在调用std::set_intersection()之前对这些向量进行排序。