找到3D点的交叉点两个std ::向量的最佳方法

时间:2017-02-11 04:21:39

标签: c++ vector 3d std

我想知道是否有一种方法,使用标准库,找到两个3D点矢量的交集。 3D点是带有x,y和z的glm :: vec3。 x,y和z是浮点数。

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

为了清楚我有2个向量:

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

其中Point是:

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的交集。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

  

1)使用运算符&lt;比较元素。并且范围必须按照相同的顺序排序。

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