2017-02-11 3 views
0

Мне было интересно, есть ли способ, используя стандартную библиотеку, найти пересечение двух векторов трехмерных точек. 3D-точка - это glm :: vec3 с x, y и z. x, y и z - поплавки.Лучший способ найти пересечение двух std :: векторов 3D-точек

Я знаю, что мы можем использовать std :: set_intersection на 1D массивах.

Просто чтобы быть ясно, у меня есть 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; 
    } 
}; 

Я хотел бы найти пересечение v1 и v2 по Point.m_position.

Благодарим за помощь.

+0

Можете ли вы определить пересечение, если вы имеете в виду стандартное множество теоретических пересечений? Если это так, вы можете определить наборы, которые являются пересекающимися операндами? Также так точка - это массив точек, сами массивы? –

ответ

0

В документации std::set_intersection() он отметил, что

1) Элементы сравниваются с помощью оператора < и диапазоны должны быть отсортированы по отношению к тем же самым.

Поэтому в основном вы должны предоставить перегруженный operator<() для Point и сортирует эти векторы перед вызовом std::set_intersection().

+0

Не могли бы вы объяснить, как написать {operator <()} для сортировки точки в 3D? – Illia

+0

@ Illia Боюсь, что это ваша работа в отношении знания домена «glm», которое у вас есть. У меня их нет. –

+0

Большое спасибо за ваш вклад. Я следовал за вашим прогрессом, и, похоже, он работает нормально. Я не знаю, есть ли способ сортировки точки в 3D, но я решил, что если применить «мою» функцию сортировки, она будет детерминированной и одинаковой по всем пунктам, которые она должна по-прежнему работать. Я сейчас тестирую его. Это занимает немного времени, но я думаю, что он должен работать. – Illia

Смежные вопросы