2017-02-11 3 views
0

Je me demandais s'il y avait un moyen, en utilisant la bibliothèque standard, de trouver une intersection de deux vecteurs de points 3D. Le point 3D est un glm :: vec3 avec x, y et z. x, y et z sont des flottants.La meilleure façon de trouver l'intersection deux std :: vecteurs de points 3D

Je sais que nous pouvons utiliser un std :: set_intersection sur des tableaux 1D.

Juste pour être clair, j'ai 2 vecteurs:

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

où le point est:

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; 
    } 
}; 

Je voudrais trouver une intersection de v1 et v2 par Point.m_position.

Nous vous remercions de votre aide.

+0

Pouvez-vous définir l'intersection, si vous voulez dire l'intersection théorique standard? Si oui, pouvez-vous définir les ensembles qui sont l'opérande à croiser? Aussi le point est un tableau de points, eux-mêmes tableaux? –

Répondre

0

Dans la documentation de std::set_intersection() il est mentionné que

1) Les éléments sont comparées en utilisant l'opérateur < et les plages doivent être triées par rapport à la même.

vous devez donc essentiellement pour fournir une operator<() surchargée pour Point et trier ces vecteurs avant d'appeler std::set_intersection().

+0

Pourriez-vous élaborer comment j'écrirais {operator <()} pour trier le point en 3D? – Illia

+0

@Illia J'ai peur que ce soit votre travail concernant la connaissance du domaine 'glm' que vous avez. Je n'en ai pas. –

+0

Merci beaucoup pour votre contribution. J'ai suivi votre avance et cela semble fonctionner correctement. Je ne sais pas s'il existe un moyen de trier les points en 3D mais je me suis dit que si j'appliquais «ma» fonction de tri et qu'elle était déterministe et la même chose sur tous les points, elle devrait encore fonctionner. Je suis en train de le tester en ce moment. C'est un peu long, mais je pense que ça devrait marcher. – Illia