J'utilise un arbre de segments multidimensionnel dans CGAL (Segment_tree_d), avec 11 dimensions. Mon objectif est de trouver des intervalles qui se chevauchent, compte tenu d'un intervalle de requête (window_query). Je suis capable de le faire, sauf lorsque les intervalles sont de taille 0. Je montre un exemple minimal, avec un arbre à trois dimensions, qui produit les mêmes problèmes. Est-ce une limitation fondamentale? Y a-t-il une option de configuration ou une classe différente que je peux utiliser? Mon cas d'utilisation n'a que des coordonnées entières, donc je peux contourner ce problème en ajoutant une petite fraction de chaque côté de l'intervalle, mais je ne veux pas le faire s'il y a une meilleure solution.Arborescence de segments dans CGAL avec des intervalles de taille 0
Source Code
#include <CGAL/Cartesian.h>
#include <CGAL/Segment_tree_k.h>
#include <CGAL/Range_segment_tree_traits.h>
typedef CGAL::Cartesian<int> K;
typedef CGAL::Range_segment_tree_set_traits_3<K> Traits;
typedef CGAL::Segment_tree_3<Traits > Segment_tree_3_type;
int main()
{
typedef Traits::Interval Interval;
typedef Traits::Key Key;
std::list<Interval> InputList, OutputList;
InputList.push_back(Interval(Key(1,5,7), Key(1,5,7)));
Segment_tree_3_type Segment_tree_3(InputList.begin(),InputList.end());
Interval a(Key(3,6,5), Key(3,6,5));
Segment_tree_3.window_query(a,std::back_inserter(OutputList));
}
Sortie:
CGAL warning: check violation!
Expression : m_interface.comp(m_interface.get_left(*count), m_interface.get_right(*count))
File : /usr/include/CGAL/Segment_tree_d.h
Line : 542
Explanation: invalid segment ignored
Refer to the bug-reporting instructions at http://www.cgal.org/bug_report.html
CGAL warning: check violation!
Expression : m_interface.comp(m_interface.get_right_win(win), m_interface.get_left_win(win))
File : /usr/include/CGAL/Segment_tree_d.h
Line : 636
Explanation: invalid window -- query ignored
Refer to the bug-reporting instructions at http://www.cgal.org/bug_report.html