2017-02-11 80 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