本文整理汇总了C++中Bounds::quadrant方法的典型用法代码示例。如果您正苦于以下问题:C++ Bounds::quadrant方法的具体用法?C++ Bounds::quadrant怎么用?C++ Bounds::quadrant使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Bounds
的用法示例。
在下文中一共展示了Bounds::quadrant方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: remove
bool
remove(const Bounds& area, const Bounds& b)
{
if (m_leaf)
return area.contains(m_data.item);
int cdel = 0;
for (int i = 0; i < 4; ++i)
{
Node** c = m_data.children + i;
if (!*c)
continue;
Bounds cb = b.quadrant(i);
if (area.intersects(cb) && (*c)->remove(area, cb))
{
delete *c;
* c = 0;
++cdel;
}
}
return cdel == 4; // true if all sub-nodes were removed
}
示例2: iterate
void
iterate(QuadTree::Iteration& iter, const Bounds& area, const Bounds& b) const
{
if (m_leaf && b.contains(m_data.item))
iter.process(m_data.item);
else
for (int i = 0; i < 4; ++i)
{
if (m_data.children[i])
{
Bounds cb = b.quadrant(i);
if (area.intersects(cb))
m_data.children[i]->iterate(iter, area, cb);
}
}
}
示例3: insert
void
insert(const QuadTree::Item& item, Bounds& b)
{
if (m_leaf)
{
m_leaf = false;
QuadTree::Item prev_item = m_data.item;
std::memset(m_data.children, 0, sizeof(m_data.children));
insert(prev_item, b); // Split
}
std::pair<int, Bounds> bq = b.quadrant(item);
Node** c = m_data.children + bq.first;
if (*c)
(*c)->insert(item, bq.second); // Branch
else
*c = new Node(item); // New leaf
}