我在CGAL(Segment_tree_d)中使用了一个多维的分段树,有11个维度。我的目标是在给定查询间隔(window_query)的情况下找到重叠间隔。我能够做到这一点,除非间隔大小为0.我显示最小的例子,有一个三维树,产生相同的问题。这是一个基本限制吗?是否有可以使用的配置选项或其他类?我的用例只有整数坐标,所以我可以通过在间隔的任一侧添加一小部分来解决这个问题,但如果有更好的解决方案,我不想这样做。
源代码
#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));
}
输出:
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
答案 0 :(得分:1)
摘自here:
一维段树也是二叉搜索树,但是一维间隔数据作为输入数据。一维间隔数据是一对(即,2元组)(a,b),其中a和b是相同类型的一维点数据,并且&lt;湾对(a,b)表示半开区间[a,b)。类似地,d维间隔由一维间隔的d元组表示。