2017-02-11 106 views
0

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

我知道,我们可以在一维数组使用一个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交集。

谢谢你的帮助。

+0

您是否可以定义交集,如果是指标准集合的理论交集?如果是这样,你能定义哪些操作数被交叉?还有这么一点是一个点数组,它们自己的数组? –

回答

0

std::set_intersection()文档它提到,

1)元素是使用运算<比较,并且范围必须相对于相同的排序。

所以基本上你需要提供一个重载operator<()Point,并呼吁std::set_intersection()之前的那些载体进行排序。

+0

请您详细说明如何编写{operator <()}以在3D中对点进行排序? – Illia

+0

@Illia恐怕你的工作是关于你所拥有的'glm'领域知识。我没有。 –

+0

非常感谢您的意见。我跟随你的进步,它似乎工作正常。我不知道是否有一种方法可以在3D中对点进行排序,但我想如果我应用“我的”排序功能,并且它是确定性的,并且它应该仍然可以工作的所有点都是相同的。我现在正在测试它。这有点费时,但我认为它应该起作用。 – Illia